More Related Content
Similar to C#で速度を極めるいろは (20)
More from Core Concept Technologies (20)
C#で速度を極めるいろは
- 8. LINQの中身
• Select().Where() より Where().Select() の方が速い
• 計算から除外するものを最初に捨てるほうが速いのは道理
• だけどそれだけではない
• WhereSelectArrayIterator
WhereSelectListIterator
WhereSelectEnumerableIterator
• LinqでWhere().Select()と連続して書くとこれらのクラスが作られて、
1イテレーションで Where+Selectの処理をしてくれる
• イテレーターもコレクションの種類ごとにある
- 9. 配列へのfor() vs foreach()
• 昔は明確に差がありforが高速と言われていた
• 今(.NET Framework 4.8/Core 2.1~)は誤差レベルの差しかない
• 配列の境界(OutOfRange)判定はJITが結構マメに省略してくれる
• foreach も境界判定が省略される
• Span<T>, ReadonlySpan<T> に対する foreach()もほぼ等速
• つまりindex を使いたいか/中身を書き換えるかで選択するのが
最良となった
• なおJITが特別扱いしているのは配列とSpan<T>だけ(重要)