如何在C#中获取CPU的逻辑核心/线程数?

14

如何获取CPU的逻辑核心数?

我需要这个信息来确定我的应用程序应该运行多少个线程。


这取决于操作系统,那么是哪个操作系统? - Barmar
任何支持 .net 3.5 的 Windows 系统。 - Kamil
2个回答

30

1
谢谢@MikeT,但我不得不接受花费作者更多时间的答案。你的回答也很令人满意。 - Kamil

21
您可以通过Environment类获取逻辑处理器数量
核心数量:
int coreCount = 0;
foreach (var item in new System.Management.ManagementObjectSearcher("Select * from Win32_Processor").Get())
{
    coreCount += int.Parse(item["NumberOfCores"].ToString());
}
Console.WriteLine("Number Of Cores: {0}", coreCount);

逻辑处理器数量

foreach (var item in new System.Management.ManagementObjectSearcher("Select * from Win32_ComputerSystem").Get())
{
    Console.WriteLine("Number Of Logical Processors: {0}", item["NumberOfLogicalProcessors"]);
}


Environment.ProcessorCount

 using System;

 class Sample 
 {
     public static void Main() 
     {
        Console.WriteLine("The number of processors on this computer is {0}.", 
           Environment.ProcessorCount);
     }
 }

请访问此链接 http://msdn.microsoft.com/en-us/library/system.environment.processorcount.aspx


1
我在System.Management中没有ManagementObjectSearcher对象。为什么? - Kamil
@Kamil:检查汇编:System.Management(在System.Management.dll中) - Ravindra Bagale
@Kamil:请检查它是否在System.ComponentModel.Component中。 - Ravindra Bagale
我尝试了Environment.ProcessorCount,看起来不错,我的Core Duo T2500 CPU检测到了2个内核。我必须在带有HT的四核Xeon上尝试这个。 - Kamil
2
我已找到并添加了对那个dll的引用。它也可以工作,但比Environment.ProcessorCount慢得多。有什么区别吗?我知道为什么WMI技术运行较慢,但结果会不同吗?Win32_ComputerSystem适用于Windows 64位系统吗? - Kamil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接