Comment puis-je déterminer par programme que ce soit sur multi-core, hyperthreading ou multi-processeurs?

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

Question

Je sais comment obtenir le type de processeur, c’est peut-être le seul moyen, mais je cherche en fait un moyen de déterminer à partir d’une application si elle est exécutée sur un processeur multicœur ou sur un ordinateur. processeur monocœur hyper-threading .

(contexte: les fournisseurs d’hébergement de certains de mes clients sont très vagues sur les ressources qu’ils mettent à disposition via des images VMWare. Cette application est supposée fonctionner sur plusieurs coeurs, mais a enregistré des performances négatives depuis son dernier "déménagement". Normalement, sur un processeur multicœur, l’un des pics sur un thread, et non pas sur l’autre. Sur ce "multicœur", les deux processeurs s’allongent, même sur les applications mono-thread.)

Était-ce utile?

La solution

System.Environment.ProcessorCount Qui inclura également les processeurs hyperthreaded. Quel VMware peut ou non exposer. Il y a plus de chances qu'il soit exposé si le processeur est compatible VT ET si vous utilisez une technologie d'hyperviseur compatible avec Baremetal.

Si vous avez XP-SP3 / WIN2k3 ou supérieur, vous pouvez utiliser WMI pour sortir:

Win32_ComputerSystem.NumberOfProcessors returns physical count

Win32_ComputerSystem.NumberOfLogicalProcessors returns logical count

Si les valeurs sont identiques, il est probable que votre système ne dispose pas de technologie HT ou qu'elle ne soit pas activée.

Vous pouvez commencer à explorer comment extraire les informations WMI dans .NET à partir de ce didacticiel .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top