如何以编程方式确定是在多核,超线程还是多处理器上?

时间:2009-11-30 00:20:38

标签: c# .net cpu multicore hyperthreading

我知道如何获得处理器类型,也许这是唯一的方法,但我实际上正在寻找 从应用程序确定它是在多核处理器上运行还是在超线程单核处理器

(背景:我的一些客户的托管服务提供商对于他们通过VMWare图像提供的资源非常模糊。这个应用程序应该在多核上运行,但自上次“移动”以来已经看到了有害的性能。通常情况下,在多核上,一个核心上有一个核心而不是另一个核心。在这个“多核”上,即使在单线程应用程序中,两个处理器都会出现峰值。)

1 个答案:

答案 0 :(得分:4)

System.Environment.ProcessorCount其中还包括超线程处理器。哪些Vmware可能会或可能不会公开。如果处理器启用了VT并且您正在使用支持裸机的虚拟机管理程序技术,则可能会暴露它。

如果你有XP-SP3 / WIN2k3或更高版本你可以使用WMI拉出来:

Win32_ComputerSystem.NumberOfProcessors returns physical count

Win32_ComputerSystem.NumberOfLogicalProcessors returns logical count

如果值相同,那么您的系统可能没有HT或没有启用它。

您可以从this tutorial开始探索如何从.NET中提取WMI信息。