さらに最適化することが難しい一連のループ計算を実行するWebApiメソッドを作成しようとしています。1つのASP.net要求の複数のコア
x.Items.AsParallel().ForAll(item =>
{
item.RunCalcs();
});
このコードを実行すると、サーバ・タスク・マネージャを見て、そのまま他のコアを残して、それは単一のプロセッサ・コアをmaxesと思われます。
私が読んだところから、asp.netは1つの要求を1つのプロセッサコアに限定しています。これは全体的な要求が非常に少ないイントラネットサーバーなので、サーバーリソースの管理には関係しません。
ループを高速化するためにこの動作を無効にするか、回避する方法はありますか?
あなたはMaxDegreeOfParallelismを設定しようとしたことがありオプション?平行。ForEach(Items、新しいParallelOptions(){MaxDegreeOfParallelism = Environment.ProcessorCount}、item => {...}); –
ループを設計し、別のスレッドを起動して負荷を分散させることができますか?だから1000個のアイテムのコレクションを持っているなら、最初の500のスレッドを起動し、残りの500のスレッドを起動しますか? – WooHoo
@SKが問題を解決しているようですが、PLinq ForAllが利用可能な最大限のリソースを使用すると考えられた理由はわかりません。おそらくそれはasp.netの下で異なっています。 – phosplait