Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何以编程方式确定是在多核、超线程还是多处理器上?_C#_.net_Cpu_Multicore_Hyperthreading - Fatal编程技术网

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

C# 如何以编程方式确定是在多核、超线程还是多处理器上?,c#,.net,cpu,multicore,hyperthreading,C#,.net,Cpu,Multicore,Hyperthreading,我知道如何获取处理器类型,也许这是唯一的方法,但我实际上在寻找一种方法,从应用程序中确定它是在多核处理器上运行还是在超线程单核处理器上运行 (背景:我的一些客户的主机提供商对他们通过VMWare映像提供的资源非常模糊。该应用程序本应在多核上运行,但自上次“移动”以来,性能一直很差。通常,在多核上,一个核在一个线程上出现峰值,而不是另一个。在这个“多核”上,即使在单线程应用程序上,两个处理器也会出现峰值。)System.Environment.ProcessorCount,其中还包括超线程处理器。

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


(背景:我的一些客户的主机提供商对他们通过VMWare映像提供的资源非常模糊。该应用程序本应在多核上运行,但自上次“移动”以来,性能一直很差。通常,在多核上,一个核在一个线程上出现峰值,而不是另一个。在这个“多核”上,即使在单线程应用程序上,两个处理器也会出现峰值。)

System.Environment.ProcessorCount,其中还包括超线程处理器。Vmware可能会也可能不会公开这些信息。如果处理器启用了VT,并且您使用的是支持裸机的虚拟机监控程序技术,则暴露该漏洞的可能性更高

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

Win32_ComputerSystem.NumberOfProcessors returns physical count

Win32_ComputerSystem.NumberOfLogicalProcessors returns logical count
如果值相同,则系统可能没有HT或没有启用HT


您可以开始探索如何从。

System.Environment.ProcessorCount中提取.NET中的WMI信息,其中还包括超线程处理器。Vmware可能会也可能不会公开这些信息。如果处理器启用了VT,并且您使用的是支持裸机的虚拟机监控程序技术,则暴露该漏洞的可能性更高

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

Win32_ComputerSystem.NumberOfProcessors returns physical count

Win32_ComputerSystem.NumberOfLogicalProcessors returns logical count
如果值相同,则系统可能没有HT或没有启用HT


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

我知道WMI,谢谢。我试试这个,可能有用。奇怪的是,taskmgr和CPU-Z都提供相同数量的处理器。但是CPU-Z显示了每个处理器一个内核,我肯定这个类型最初(物理上)是一个四核。这可能很难做到正确。请看一看:我还没有看过这些视频。我怀疑您使用的vmware软件或版本未启用VT,或在bios中被禁用。在这种情况下,它只是在两个内核上人为地调度VM。如果您将超线程和ESX用作裸机虚拟机监控程序,请对其进行一些讨论,说明ESX可以将VM调度到虚拟核心上。有人提到,只有在需求超过可用内核时,才会使用虚拟内核。我想知道在支持VT的处理器上会如何工作,嗯。如果我没记错的话,您可以将ESX中的VM绑定到特定的处理器。我接受这个答案,因为它回答了这个问题。从各种来源和其他问题中,我发现从虚拟机中获取我想要的信息是不可能的。我知道WMI,谢谢。我试试这个,可能有用。奇怪的是,taskmgr和CPU-Z都提供相同数量的处理器。但是CPU-Z显示了每个处理器一个内核,我肯定这个类型最初(物理上)是一个四核。这可能很难做到正确。请看一看:我还没有看过这些视频。我怀疑您使用的vmware软件或版本未启用VT,或在bios中被禁用。在这种情况下,它只是在两个内核上人为地调度VM。如果您将超线程和ESX用作裸机虚拟机监控程序,请对其进行一些讨论,说明ESX可以将VM调度到虚拟核心上。有人提到,只有在需求超过可用内核时,才会使用虚拟内核。我想知道在支持VT的处理器上会如何工作,嗯。如果我没记错的话,您可以将ESX中的VM绑定到特定的处理器。我接受这个答案,因为它回答了这个问题。从各种来源和其他问题中,我发现从虚拟机中获取我想要的信息(很少)是不可能的。