1

メタヒューリスティック ソルバーを実装し、.NET 4.0Parallel.Forと.NET を利用しParallel.Foreachました。私のミディアムエンドマシンで問題なく動作します。しかし、検索が激しすぎて、リソース、特にローエンド マシンの CPU 時間を消費しすぎます。

そのため、必要に応じて検索の強度を下げるオプションを付ける必要があると思います。アルゴリズムにあまり触れずに CPU 使用率を下げたいと考えています。マシンがロックアップせず、他の作業を脇に置ける限り、検索の完了が遅くても問題ありません。

Thread.Sleepすべてのスレッドが 100% CPU バウンド (I/O なし) であるため、メソッドを配置することを検討しています。それは私が必要とするCPU使用率の強度を減らすつもりですか? より良い解決策はありますか?

4

2 に答える 2

-1

異なるスレッドを使用する場合は、次のことをお勧めします。

Thread.Priority = ThreadPriority.BelowNormal

したがって、スレッドの優先度は低くなります。

編集

さて、このソリューションは、ThreadPool で使用されていない場合にのみ受け入れられます..

ここではよくわかりませんが、どうですか:

Process.ProcessorAffinity
  • このプロセスのスレッドの実行をスケジュールできるプロセッサを取得または設定します。

コアを制限すれば、他の作業のためのスペースが増えますよね?

于 2012-09-12T19:23:41.063 に答える
-1

(パラペットの上に頭を突き刺し、多くの反対票で撃墜される準備をしています..:)

異なるスレッドを使用する場合は、次のことをお勧めします。

Thread.Priority = ThreadPriority.BelowNormal

したがって、スレッドの優先度は低くなります。

[はい、これは C Sharper の回答のそのままのコピーですが、スレッドプール スレッドとアフィニティ ボーディングに関するその後の編集はありません。これが良いアイデアだと思うなら、私ではなくC Sharperに賛成票を投じてください]。

または、タスク マネージャーまたはその他の手段を使用して、プロセス全体の優先度を下げます。これにより、プロセス内のすべてのスレッドの「実際の」スケジューリングの優先順位が下がり (「本当に悪い考え」のスレッドプール スレッドを含む)、CPU を集中的に使用するわけではないが、必要なときに迅速に応答する必要がある他のアプリのユーザー エクスペリエンスが向上します。何かをする。優先度の低い重いアプリは残りのすべての CPU を消費し、今月の売上高を編集したり、違法にダウンロードされた最新の著作権で保護された映画を見たりしないことにした場合は、通常の優先度で実行した場合と同様に実行されます.

于 2012-09-13T07:14:28.923 に答える