3

私が持っているとしましょうDataTable

var dt = getDataTable();

そして、私はします

Parallel.For (0, dt.Rows.Count, i => Foo (dt.Rows[i]));

Fooでいくつかの計算を行う関数ですrow

Foo使用する必要がありますPlinqか? またはすべきではありませんか?

(分割してからコアに分割しても意味がありません。)

4

1 に答える 1

4

FooもPlinqを使用する必要がありますか?またはすべきではありませんか?

一般に、通常は、可能な限り「最高レベル」でのみ並列化する必要があります。より大きな作業項目を作成することで、作業のスケジュールに必要なオーバーヘッドの量が削減されるため、総スループットが最大化されます。

ループ内でPLINQを使用した場合Parallel.For、(作業項目をスケジュールするために)オーバーヘッドが追加されますが、より多くのコアを利用できないため、全体的なパフォーマンスが低下する可能性があります。Fooそのため、この場合、内部でPLINQを使用することはお勧めしません(DataTableうまく並列化するのに十分な行がある場合)。

于 2012-10-30T18:54:44.697 に答える