2010-04-05 3 views
0

У меня нет доступа к компьютеру с несколькими гнездами, поэтому я не уверен, что следующее получит общее количество процессоров и логических процессоров. Я предполагаю, что ManagementObjectSearcher вернет экземпляр для каждого сокетного процессора, и я просто оставлю текущую сумму?Это правильный способ получить общее количество процессоров с WMI в системе с несколькими процессорами?

int totalCPUs = 0; 
int totalLogicalCPUs = 0; 

ManagementObjectSearcher mos = new ManagementObjectSearcher("Select * from Win32_ComputerSystem"); 
foreach (var mo in mos.Get()) 
{ 
    string num = mo.Properties["NumberOfProcessors"].Value.ToString(); 
    totalCPUs += Convert.ToInt32(num); 


    num = mo.Properties["NumberOfLogicalProcessors"].Value.ToString(); 
    totalLogicalCPUs += Convert.ToInt32(num); 
} 
+0

Это не так, но ваш код по-прежнему будет работать, когда он будет запущен на массовом параллельном кластере с несколькими машинами. –

ответ

0

Он вернет только 1 экземпляр Win32_ComputerSystem. Из documentation:

Если компьютерная система имеет два физических процессоров, каждый из которых содержит два логических процессоров, то значение NumberOfProcessors равно 2 и NumberOfLogicalProcessors равно 4. Процессоры могут быть многоядерными или они могут быть процессорами HyperThreading.