1

nullプロパティ(任意の1つ)をに設定する最速の方法は何IEnumerableですか?私foreachの唯一の選択肢はありますか?

4

2 に答える 2

7

リストが非常に大きい場合は、これを並行して実行することを検討できます。

enumerable.AsParallel().ForAll(a => a.Value = null);

ただし、オブジェクトはスレッドセーフである必要があることを念頭に置いてベンチマークとむき出しにする価値があります。

ここでの簡単なテストでは、リストのサイズが1,000万アイテムを超えた場合の投資収益率が示されました*。リストのサイズを小さくし、並列処理を設定するコストがメリットを上回ります。

*マイレージは変動します

于 2013-01-28T15:42:24.583 に答える
1

目標を達成するには2つの方法があります。

  1. あなたが言ったように:

    foreach(var item in enumeration)
    {
        item.Property = null;
    }
    
  2. LINQを使用することもできます。

    enumeration.ToList().ForEach(item => item.Property = null);
    

2番目の方法は短くて読みやすく見えますが、実行速度が遅くなる可能性があります。これは、Jeppe Stig Nielsenが指摘したように、が(最初に列挙される)IEnumerableに変換され、そのリストが再度列挙されて、最終的にプロパティが設定されるためです。List

したがって、あなたは正しいです:foreachあなたの唯一の選択肢です。ただし、foreach-representationは次のようになりますが、各アイテムを変更するには、常にコレクションを反復処理する必要があります。

于 2013-01-28T15:31:13.820 に答える