Autor Beitrag
OlafSt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 486
Erhaltene Danke: 99

Win7, Win81, Win10
Tokyo, VS2017
BeitragVerfasst: Fr 12.07.13 10:25 
Hallo Freunde,

seit zwei Tagen befasse ich mich mit dem Thema "Systemdaten ermitteln". Das WMI hat sich dabei als ein unerschöpflicher Quell von Informationen erwiesen - mit einer Ausnahme: Das Auslesen des aktuellen Prozessortakts.

Google habe ich nun zwei Tage gequält und dabei exakt eine einzige, brauchbare Lösung gefunden; alle Suchergebnisse enden entweder mit diesem Code oder (fast 99% der Ergebnisse) im Nichts:

ausblenden C#-Quelltext
1:
2:
3:
4:
ManagementObject mo = new ManagementObject("Win32_Processor.DeviceID='CPU0'");
Res=(uint)mo["CurrentClockSpeed"];
mo.Dispose();
return Res;


Nun das Problem: Das WMI gönnt sich eine unendlich lange Zeit dafür, den Prozessortakt zu ermitteln (>1 Sekunde). Das Auslesen meiner 4 CPU-Auslastungswerte dauert dagegen ganze 40µs :shock: Natürlich gibt es Möglichkeiten, sich die daraus entstehenden Probleme vom Hals zu halten (GetCPUClock() in einen Thread schieben, einen eigenen Timer dafür verwenden usw. usf). Ich habe vor Jahren selbst so eine Routine gebastelt (in Delphi), die braucht bei weitem nicht so lange dafür. Die könnte ich in eine DLL verpacken und dann integrieren - hätte dann aber unmanaged Code im Programm :( Mir sind also eine Reihe Ausweichoptionen bekannt :wink:

Gibt es eine schnellere Möglichkeit, an den aktuellen CPU-Takt zu kommen als das WMI ?

_________________
Lies, was da steht. Denk dann drüber nach. Dann erst fragen.