2

特定のマシンで使用可能な実際のコアの数と、ハイパースレッディングが有効になっているかどうかを知る必要があるコードがいくつかあります。

C#でこれを行う方法はありますか?

更新: マシンは XP と Vista が混在しています

更新: 'Win32_Processor.NumberOfCores' または 'Win32_Processor.NumberOfLogicalProcessors' にアクセスすると、いずれかのマシン (すべてではない) で例外 (「Not Found」というメッセージを含む ManagmentException) がスローされます。

4

6 に答える 6

3

Vista 以降では、PInvoke 経由で GetLogicalProcessorInformation を使用して、論理プロセッサ ユニットの数を取得できます。

Windows XP では、ハイパースレッディングを他のマルチプロセッサ/コア構成と確実に区別する C# 経由の方法はありません。誰かが投稿した WMI ソリューションは、マルチコア プロセッサをハイパースレッドとして分類します。

Vista より前では、唯一の信頼できる手段は、プロセッサの CPUID を確認することです。これを使用するには、マネージド コードから呼び出すことができるネイティブ DLL を作成できます。次の Intel コードサンプルは、出発点として適しています。

于 2009-02-12T20:22:54.983 に答える
2

少なくとも最初の質問に対する簡単な答え: Environment.ProcessorCountはマシンのコア数を返す必要があります。

編集:ハイパースレッディングが有効になっているかどうかを確認する非WMIベースの方法を次に示します(必ずしもより良いというわけではありません)。こちらの記事もご覧ください。

于 2009-02-12T20:20:28.670 に答える
1

Environment.ProcessorCount プロパティを確認してください。HyperThreading に関する限り、整数が返されます。わかりません。

于 2009-02-12T20:19:14.790 に答える
1

System.Environment.ProcessorCount は、コードが実行されているマシンに存在するコアの数を示します。

于 2009-02-12T20:18:37.600 に答える
0

StackOverflow の質問 188503には、必要な情報が含まれています...

その質問に対する一番の答えを引用すると:

System.Environment.ProcessorCount

論理プロセッサの数を返します ( MSDNを参照)

ハイパースレッド化されたコアと個別のコアを区別するには、少し WMI が必要なように思えます。

于 2009-02-12T20:24:06.307 に答える
0

HT の側面ではGetLogicalProcessorInformationで十分ですが、残念ながら XP SP3、64 ビット XP/Vista/Server 2003 でしか利用できません (ビスタより前では少し壊れていると思います)。

Joe Duffyはこれを c# でラップしましたが、まだソースをリリースしていません。ただし、Mark Russinovich はそれを使用して作成したツール (Coreinfo) をリリースしています。

于 2009-02-12T20:49:17.010 に答える