如何在 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 逻辑内核/线程的数量?的主要内容,如果未能解决你的问题,请参考以下文章