Wie kann ich feststellen, ob die Maschine, die mein Programm ausgeführt wird, verwendet hyperthreading?(C#)

StackOverflow https://stackoverflow.com/questions/543039

  •  23-08-2019
  •  | 
  •  

Frage

Ich habe einige code, der muss wissen, wie viele tatsächliche cores verfügbar sind, die auf meiner Maschine, und ob oder nicht, Hyperthreading aktiviert ist.

Gibt es eine Möglichkeit, dies in C#?

Update:Die Maschinen sind eine Mischung von XP und Vista

Update:Zugriff Auf 'Win32_Processor.NumberOfCores "oder" Win32_Processor.NumberOfLogicalProcessors' wirft eine Ausnahme (ein ManagmentException mit der Meldung "Nicht Gefunden") auf eine der Maschinen (aber nicht alle von Ihnen)

War es hilfreich?

Lösung

Auf Vista und höher können Sie-GetLogicalProcessorInformation-über PInvoke, um die Anzahl der logischen Prozessoren.

Unter Windows XP gibt es keine Möglichkeit, über C# - zuverlässig zu unterscheiden, hyper-threading, die aus anderen multi-Prozessor - /Kern-Konfigurationen.Die WMI-Lösung, die jemand gepostet wird Klasse multi-core-Prozessoren mit hyper-Threading.

Vor der Vista das einzige zuverlässige Mittel ist, um die CPUID des Prozessors.Verwenden Sie diese konnten Sie erstellen eine native DLL, die aufgerufen werden können, die von verwaltetem code.Die folgenden Intel-code Probe wäre ein guter Ausgangspunkt.

Andere Tipps

Eine einfache Antwort auf die erste Frage, die mindestens: Umgebung.ProcessorCount sollte Rückkehr der Anzahl der Kerne auf der Maschine.

Bearbeiten: Hier's a non-WMI-Methode auf Basis der überprüfung, ob Hyper-Threading aktiviert ist (nicht, dass es ein schöner, unbedingt).Siehe auch diese Artikel.

System.Umgebung.ProcessorCount wird Ihnen sagen, wie viele Kerne vorhanden sind, auf die Maschine der code ausgeführt wird.

Überprüfen Sie die Umwelt.ProcessorCount Eigenschaft, es wird eine Ganzzahl zurückgegeben, soweit HyperThreading, ich bin mir nicht sicher.

StackOverflow-Frage, 188503 die Informationen, die Sie brauchen ...

Zitieren Sie die top-Antwort auf diese Frage:

System.Environment.ProcessorCount

gibt die Anzahl der logischen Prozessoren (siehe MSDN)

Die Unterscheidung zwischen Hyperthreaded und getrennte Kerne, klingt, als ob Sie etwas brauchen WMI.

- GetLogicalProcessorInformation - ist ausreichend für die HT-Aspekt, aber leider ist es nur in XP SP3, XP 64bit/Vista/Server 2003 (und ich glaube, dass ist leicht gebrochen, vor vista)

Joe Duffy eingewickelt in c#, aber noch nicht veröffentlicht, die Quelle, obwohl Mark Russinovich hat, veröffentlicht das tool Coreinfo) schuf er mit Ihr, wahrscheinlich können Sie zu dekompilieren, zu sehen, dass der code.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top