プログラムが実行されているマシンでハイパースレッディングが使用されているかどうかを確認するにはどうすればよいですか?(C#)
-
23-08-2019 - |
質問
特定のマシンで利用可能な実際のコアの数と、ハイパースレッディングが有効になっているかどうかを知る必要があるコードがいくつかあります。
C#でこれを行う方法はありますか?
アップデート:マシンは XP と Vista が混在しています
アップデート:「Win32_Processor.NumberOfCores」または「Win32_Processor.NumberOfLogicalProcessors」にアクセスすると、マシンの 1 つ (すべてではありません) で例外 (「Not Found」というメッセージを含む ManagmentException) がスローされます。
解決
Vistaでは、より高いあなたは、論理プロセッサユニットの数を取得するのPInvoke経由GetLogicalProcessorInformationを使用することができます。
Windows XPでは確実に他のマルチプロセッサ/コア構成からハイパースレッディングを区別するためのC#を介した方法はありません。誰かがハイパースレッドとして意志クラスマルチコアプロセッサを掲載します。
WMI溶液以前Vistaにのみ信頼できる手段は、プロセッサのCPUIDをチェックすることです。これを使用するには、マネージコードから呼び出すことができますネイティブのDLLを作成することができます。次のインテルコードサンプルには次のようになり良い出発点ます。
他のヒント
最初の質問に対する単純な答え少なくとも:。のEnvironment.ProcessorCount のマシン上のコアの数を返す必要があります。
編集:ここでは(それがどんな立派必ずしもだないこと)ハイパースレッディングが有効になっているかどうかをチェックする「SA非WMIベースの方法に。また、このの記事を参照してください。
System.Environment.ProcessorCountは、コードが実行されているマシン上に存在するどのように多くのコアを教えてくれます。
私はわからないんだけど、それはハイパースレッディング限り、整数を返します、Environment.ProcessorCountプロパティを確認します。
StackOverflow 質問 188503 必要な情報があります...
その質問に対するトップの回答を引用します。
System.Environment.ProcessorCount
論理プロセッサの数を返します (「 MSDN)
ハイパースレッド コアと個別のコアを区別するには、少しの WMI が必要のように思えます。
GetLogicalProcessorInformation のHTの態様のために十分であるが、残念ながらそれはXP SP3、64ビットXP / Vistaの/ Server 2003の(と私は少し前Vistaを破られていると考えている)。
でのみ利用可能ジョーダフィーは、ラップにC#で、このしかし、マークRussinovich氏は彼がそれを作成したツール(Coreinfo)をリリースしましたけれども、まだ可能性は、コードを見てそれを逆コンパイルすることができ、ソースをリリースしていません。