私が持っているとしましょうDataTable
。
var dt = getDataTable();
そして、私はします
Parallel.For (0, dt.Rows.Count, i => Foo (dt.Rows[i]));
Foo
でいくつかの計算を行う関数ですrow
。
Fooも使用する必要がありますPlinq
か? またはすべきではありませんか?
(分割してからコアに分割しても意味がありません。)
私が持っているとしましょうDataTable
。
var dt = getDataTable();
そして、私はします
Parallel.For (0, dt.Rows.Count, i => Foo (dt.Rows[i]));
Foo
でいくつかの計算を行う関数ですrow
。
Fooも使用する必要がありますPlinq
か? またはすべきではありませんか?
(分割してからコアに分割しても意味がありません。)
FooもPlinqを使用する必要がありますか?またはすべきではありませんか?
一般に、通常は、可能な限り「最高レベル」でのみ並列化する必要があります。より大きな作業項目を作成することで、作業のスケジュールに必要なオーバーヘッドの量が削減されるため、総スループットが最大化されます。
ループ内でPLINQを使用した場合Parallel.For
、(作業項目をスケジュールするために)オーバーヘッドが追加されますが、より多くのコアを利用できないため、全体的なパフォーマンスが低下する可能性があります。Foo
そのため、この場合、内部でPLINQを使用することはお勧めしません(DataTable
うまく並列化するのに十分な行がある場合)。