Come faccio a sapere se la macchina il mio programma è in esecuzione su utilizza l'hyperthreading?(C#)
-
23-08-2019 - |
Domanda
Ho un po ' di codice che deve conoscere il numero effettivo dei core disponibili sulla mia macchina, e se non l'Hyperthreading è abilitato.
C'è un modo per farlo in C#?
Aggiornamento:Le macchine sono un mix di XP e Vista
Aggiornamento:Accedendo A " Win32_Processor.NumberOfCores' o 'Win32_Processor.NumberOfLogicalProcessors' genera un'eccezione (un ManagmentException con il messaggio "Non Trovato") su una delle macchine (ma non tutti)
Soluzione
Su Vista e versioni successive, è possibile utilizzare GetLogicalProcessorInformation via PInvoke per ottenere il numero di processori logici unità.
Su Windows XP non c'è modo tramite C# distinguere in modo affidabile la tecnologia hyper-threading da altri multi-processore/core configurazioni.La WMI soluzione che qualcuno ha postato verrà classe di processori multi-core, come hyper-thread.
Prima Vista l'unico mezzo affidabile è quello di controllare il CPUID del processore.Per utilizzare questo si potrebbe creare una DLL nativa che può essere chiamato dal codice gestito.I seguenti Intel codice campione sarebbe un buon punto di partenza.
Altri suggerimenti
Sistema.Ambiente.ProcessorCount vi dirà quante anime esiste sulla macchina il codice è in esecuzione.
Controllare l'Ambiente.ProcessorCount proprietà, restituisce un numero intero, per quanto riguarda l'HyperThreading, non ne sono sicuro.
StackOverflow domanda 188503 le informazioni di cui hai bisogno ...
Citando la risposta in alto sulla questione:
System.Environment.ProcessorCount
restituisce il numero di processori logici (vedere MSDN)
Per distinguere tra Hyperthreaded e distinti nuclei, suona come se avete bisogno di un po ' di WMI.
GetLogicalProcessorInformation è sufficiente per l'HT aspetto, ma purtroppo è disponibile solo in XP SP3, 64bit XP/Vista/Server 2003 (e, io credo, è leggermente rotto pre vista)
Joe Duffy avvolto in c#, ma non ha ancora rilasciato i sorgenti, anche se Mark Russinovich ha rilasciato il tool (Coreinfo) ha creato con esso, è probabile che si può decompilare che per vedere il codice.