Comment puis-je déterminer par programme que ce soit sur multi-core, hyperthreading ou multi-processeurs?
-
08-07-2019 - |
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.)
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 .