11

C# で記述されたプログラムがあり、VSTS 2008 + .Net 3.5 + Windows Vista Enterprise x86 を使用して Windows フォーム アプリケーションを開発しています。

私の現在のコンピューターはデュアルコア CPU です。プログラムの CPU アフィニティを特定の CPU で実行するように設定し、別の CPU を解放して他の仕事を実行したいと考えています。これを行う方法はありますか?コーディングまたは構成のいずれかで問題ありません。

もう少し背景として、私のプログラムは CPU を集中的に使用するため、コンピューターの 2 つの CPU リソースすべてを占有させたくないので、同時にネットワークをすばやくブラウズできるように 1 つの CPU を解放したいと考えています。:-)

前もって感謝します、ジョージ

4

3 に答える 3

13
  1. [タスク マネージャー] -> [プロセス] タブに移動します。
  2. プログラムを探します。それを右クリックします。
  3. [アフィニティの設定]を選択し、チェックボックスの 1 つをオフにします。

これにより、1 つのプロセッサが解放されます。

コードから実行するには、次のステートメントを追加できます。

System.Diagnostics.Process.GetCurrentProcess().ProcessorAffinity = (System.IntPtr) 1;

乾杯!

于 2009-06-27T07:25:47.327 に答える
7

これを行うための Windows API 関数はSetProcessAffinityMask()SetThreadAffinityMask()です。私は .NET を知らないので、これらの関数の周りにラッパーがあるかどうかはわかりませんが、そうでないことを示唆しているようです。

ところで:これらは非常に特定の状況でのみ必要であることに同意します。通常は、OS スケジューラに処理させるのが最善です。これは、方法を尋ねなければならない場合、おそらく行うべきではない質問の 1 つです。

于 2009-06-27T07:30:26.287 に答える
3

実際には、より多くの CPU を使用するために特別に何かをしない限り、アプリケーションが複数の CPU を使用することはありません。スレッド プールを使用したり、追加のスレッドを開始したりする場合は、追加の使用可能なコアを使用できますが、それ以外の場合、アプリケーションはデフォルトで 1 つのスレッドしか持たないため、1 つの CPU しか使用しません。

于 2009-06-27T07:14:21.200 に答える