Я понимаю, что могу получить логическое число процессоров, ссылаясь на Environment.ProcessorCount
, но есть ли способ получить количество физических процессоров / ядер на машине, используя .NET core 2.2? В .NET Framework я бы использовал что-то вроде следующего, но я знаю, что в ядре он недоступен из-за поддержки перекрестного доступа.
var physicalCPUs = 0;
List<string> sockets = new List<string>();
System.Management.ManagementClass mc = new System.Management.ManagementClass("Win32_Processor");
System.Management.ManagementObjectCollection moc = mc.GetInstances();
// Iterate through logical processors
foreach (System.Management.ManagementObject mo in moc)
{
string socketDesignation = mo.Properties["SocketDesignation"].Value.ToString();
// We will count the unique SocketDesignations to find the number of physical CPUs in the system.
if (!sockets.Contains(socketDesignation))
sockets.Add(socketDesignation);
}
physicalCPUs = sockets.Count;