2017-06-16 5 views
0

配列ArrayExを指定すると、これらの2つは同等ですか?複数の配列を含む複雑なオブジェクトをモデルにマッピングしようとすると、パフォーマンスに違いはありますか?ArrayName.First()とArrayName [0]のパフォーマンスの差

ArrayEx[0] 
ArrayEx.First() 
+0

質問は、https://stackoverflow.com/questions/6165462/difference-between-list-first-list-elementat0-and-list0とほぼ同じです。 – hatchet

+0

関連https://stackoverflow.com/questions/33544269/c-sharp-first-vs-0 – hatchet

+3

正確に測定するのはかなり難しいですが、First()でカウントすると、単純なインデックス作成よりも約1桁遅くなります。 First()は遅いため、*ではありません。なぜなら、配列の索引付けは非常に速いためです。検索したデータを使って次に何をしても、その違いが見えなくなります。 –

答えて

2

目は最初のものは単純なインデクサである場合、それはより一般的になりIEnumerable<T>タイプの拡張方法です。

.First()は少し遅くする必要があります。

+0

非常に小さいビットだけ遅いです。 'First'はソースが' IList'かどうかをチェックし、もしそうなら '[0]'だけを行います。 – hatchet

+0

@hatchet true、それはほとんど無視できる性能差です。 – Deadzone

+1

@hatchet、実際には、インターフェイス(仮想メソッド呼び出しを意味する)を介してインデクサーにアクセスすることは、配列インデクサー(IL命令がある)に直接アクセスするよりもかなり遅くなります。ほとんどのシナリオでは、それは問題ではありませんが、パフォーマンス重視のコードでは重要です。 –

関連する問題