我有一些代码需要知道我的特定机器上有多少个实际内核,以及是否启用了超线程。
有没有办法在C#中做到这一点?
更新:这些机器是XP和Vista的混合体
更新:访问“ Win32_Processor.NumberOfCores”或“ Win32_Processor.NumberOfLogicalProcessors”会在其中一台计算机(但不是全部)上引发异常(带有消息“未找到”的ManagmentException)
最佳答案
在Vista或更高版本上,可以通过PInvoke使用GetLogicalProcessorInformation来获取逻辑处理器单元的数量。
在Windows XP上,无法通过C#可靠地将超线程与其他多处理器/内核配置区分开。有人发布的WMI解决方案会将多核处理器归类为超线程。
在Vista之前,唯一可靠的方法是检查处理器的CPUID。要使用此功能,您可以创建可以从托管代码中调用的本机DLL。以下英特尔代码sample将是一个很好的起点。