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

Posted

技术标签:

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

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

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

【问题讨论】:

它依赖于操作系统,那么什么操作系统? 任何支持 .net 3.5 的 Windows 【参考方案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,但我不得不接受让作者花费更多时间的答案。你的回答也很满意。

以上是关于如何在 C# 中获取 CPU 逻辑内核/线程的数量?的主要内容,如果未能解决你的问题,请参考以下文章

什么是逻辑处理器?

Mac 中 VMware 虚拟机中涉及的CPU数量 & 内核数量 & 线程数 & 资源分配问题

8350cpu四个内核八个逻辑处理器啥意思啊啊

笔记本电脑,4个内核4个逻辑处理器是几线程

CPU篇---理清“核“概念-01

Perl中的CPU /内核数