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

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

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

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

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

Win32_ComputerSystem.NumberOfProcessors returns physical count Win32_ComputerSystem.NumberOfLogicalProcessors returns logical count 

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

您可以从本教程开始探索如何从.NET中提取WMI信息。