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:
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

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
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.