[英]How do I tell if the machine my program is running on uses hyperthreading? (C#)
我有一些代碼需要了解特定機器上有多少個實際內核,以及是否啟用了超線程。
有沒有辦法在C#中做到這一點?
更新:這些機器是XP和Vista的混合體
更新:訪問“ Win32_Processor.NumberOfCores”或“ Win32_Processor.NumberOfLogicalProcessors”會在其中一台計算機(但不是全部)上引發異常(帶有消息“未找到”的ManagmentException)
在Vista或更高版本上,可以通過PInvoke使用GetLogicalProcessorInformation來獲取邏輯處理器單元的數量。
在Windows XP上,無法通過C#可靠地將超線程與其他多處理器/核心配置區分開。 有人發布的WMI解決方案會將多核處理器歸類為超線程。
在Vista之前,唯一可靠的方法是檢查處理器的CPUID。 要使用此功能,您可以創建可以從托管代碼中調用的本機DLL。 以下英特爾代碼示例將是一個很好的起點。
System.Environment.ProcessorCount將告訴您運行代碼的計算機上存在多少個內核。
檢查Environment.ProcessorCount屬性,它會返回一個整數,至於HyperThreading,我不確定。
StackOverflow問題188503具有您需要的信息...
引用該問題的最高答案:
System.Environment.ProcessorCount
返回邏輯處理器的數量(請參閱MSDN )
要區分超線程內核和單獨的內核,聽起來好像需要一點WMI。
GetLogicalProcessorInformation對於HT方面已足夠,但可悲的是,它僅在XP SP3、64位XP / Vista / Server 2003中可用(並且我相信在Vista之前會有些許中斷)
喬·達菲(Joe Duffy)將其包裝在c#中,但尚未發布源代碼,盡管馬克·魯西諾維奇(Mark Russinovich)已發布了他使用它創建的工具(Coreinfo),可能您可以對其進行反編譯以查看代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.