- PR -

WMIにてローカルマシンのCPU数を取得したい

1
投稿者投稿内容
こんどる
常連さん
会議室デビュー日: 2004/05/10
投稿数: 30
投稿日時: 2005-02-18 18:02
こんにちは、こんどるです。

自マシンにささっているCPU数を取得する方法を探しています。

WMIのWin32_Processorにて取得できそうだなと思い調べてみたのですが
どうも、CPU数っぽいものがありません。

※以下のコードのように取得できるのかなと考えております(クロック数の例ですが)。

ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Processor");
ManagementObjectCollection colResult = searcher.Get();
ArrayList lstMacAddress = new ArrayList();
if(colResult != null)
{
foreach (ManagementObject objItem in colResult)
{
lstMacAddress.Add(objItem["MaxClockSpeed"].ToString());
}

colResult.Dispose();
searcher.Dispose();
}

※取得できるプロパティは以下のURLに載っています。
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/win32_processor.asp

どなたか取得方法をご存知の方、いらっしゃいましたら教えて頂けませんでしょうか。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-02-18 22:24
HT対応はどうするの?
_________________
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2005-02-18 23:48
引用:

ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Processor");
ManagementObjectCollection colResult = searcher.Get();



colResult.Count の値をみてみるとか。
_________________
// 渋木宏明 (Hiroaki SHIBUKI)
// http://hidori.jp/
// Microsoft MVP for Visual C#
//
// @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/
Vacant-Eyes
ベテラン
会議室デビュー日: 2004/08/15
投稿数: 97
投稿日時: 2005-02-19 02:07
CPUを複数積んでる環境が今ないのでなんとも言えないのですが、
Win32_ComputerSystemProcessor クラスのPartComponentプロパティに

\\[PC名]\root\cimv2:Win32_Processor.DeviceID="CPU0"

という値が入っていました。
何か関係あるでしょうか・・・
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2005-02-19 03:51
HTを有効にしたデュアルCPU環境で、colResult.Countが4を返しますね。
各Win32_ProcessorインスタンスのプロパティはDeviceID(CPU0からCPU3)以外全く同じですが。
物理的なCPUの数を取得するのは無理なような気がします。

ところで、恐らく環境依存の話になりますが、デュアルCPU環境において、
colResult.Countを取得した後でcolResult.GetEnumerator()を呼ぶと、
ManagementExceptionが発生してしまいました。
「基になる RCW から分割された COM オブジェクトを使うことはできません。」
だそうで。
Countを取得せずいきなりGetEnumerator()を呼ぶと出ないんですが。
こんどる
常連さん
会議室デビュー日: 2004/05/10
投稿数: 30
投稿日時: 2005-02-21 10:29
こんどるです。
みなさん返信有難うございます。
お返事が遅くなって申し訳ありません。

渋木宏明(ひどり)さんのおっしゃるようにcolResult.Count の値を見てみようとしたことはあったのですが、
***********************************
System.NotSupportedException: 指定されたメソッドはサポートされていません。
at System.Management.ManagementObjectCollection.get_Count()
***********************************
のような例外が発生してしまい、使用できませんでした。
Hongliangさんのおっしゃられている例外と同じように環境に依存するものだとは思いますが。
(※環境はWindows 2003 Server, .NET Framework 1.1 です)

そこで、少し変えて
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Processor");
ManagementObjectCollection colResult = searcher.Get();

int intCPUCnt = 0;
if(colResult != null)
{
foreach (ManagementObject objItem in colResult)
{
intCPUCnt++;
}
}

のように取得してみました。
これにより、論理プロセッサ数が取得できそうです。

確かに、HTの関係上、物理的なCPU数を取得するのは難しそうですが
今回はこれで進めてみます。
有難うございました。
1

スキルアップ/キャリアアップ(JOB@IT)