Come faccio a sapere se la macchina il mio programma è in esecuzione su utilizza l'hyperthreading?(C#)

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

  •  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)

È stato utile?

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

Semplice la risposta alla prima domanda, almeno: Ambiente.ProcessorCount deve restituire il numero di core del computer.

Modifica: Qui's un non-WMI-metodo di verifica se l'Hyperthreading è abilitato (beh, non necessariamente più bello).Vedi anche questo articolo.

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top