【问题标题】:How to get number of CPU's logical cores/threads in C#?如何在 C# 中获取 CPU 逻辑内核/线程的数量?
【发布时间】:2012-10-12 12:29:17
【问题描述】:

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

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

【问题讨论】:

  • 它依赖于操作系统,那么什么操作系统?
  • 任何支持 .net 3.5 的 Windows

标签: c# multithreading .net-3.5


【解决方案1】:

您可以通过 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

【讨论】:

  • 我在 System.Management 中没有 ManagementObjectSearcher 对象。为什么?
  • @Kamil:检查程序集:System.Management(在 System.Management.dll 中)
  • @Kamil:检查它是否在 System.ComponentModel.Component
  • 我试过 Environment.ProcessorCount,看起来不错,我在 Core Duo T2500 CPU 上检测到 2 个内核。我必须在带有 HT 的四核至强上尝试这个。
  • 我找到并添加了对该 dll 的引用。它也可以工作,但比 Environment.ProcessorCount 慢得多。有什么区别?我知道为什么 WMI 技术的工作速度较慢,但​​结果会有所不同吗? Win32_ComputerSystem 能否在 Windows 64 上运行?
【解决方案2】:

使用Environment.ProcessorCount property,它返回逻辑核心数。

【讨论】:

  • 感谢@MikeT,但我不得不接受让作者花费更多时间的答案。你的回答也很满意。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-08
  • 1970-01-01
  • 2011-03-18
  • 2022-01-22
  • 1970-01-01
相关资源
最近更新 更多