Oder vielleicht lautet die Frage eher: "Was mache ich hier krass falsch?"
Ich habe eine Testanwendung, die nichts anderes tut, als ihren eigenen CPU-Verbrauch zu überwachen. Es sieht ein wenig so aus wie dieses:
protected PerformanceTrace()
{
Process currentProcess = Process.GetCurrentProcess();
this.cpuCounter = new PerformanceCounter("Process", "% Processor Time", currentProcess.ProcessName);
this.coreCount = Environment.ProcessorCount;
}
private int coreCount;
private DateTime lastCpuRead = DateTime.MinValue;
private float _cpuUsage;
private float CpuUsage
{
get
{
if ((DateTime.Now - this.lastCpuRead) > TimeSpan.FromSeconds(1.0))
{
this._cpuUsage = this.cpuCounter.NextValue();
}
return this._cpuUsage / this.coreCount;
}
}
Die Eigenschaft CpuUsage wird sehr häufig gelesen. Hier ist die Sache:
Auf meinem Rechner, Environment.ProcessorCount
ergibt einen Wert von 2. Der Wert, der vom Zähler kommt, ist jedoch oft bis zu 800. Ich vermute, dass dies etwas mit mehreren Kernen und Hyperthreading zu tun hat. Was kann ich tun, um den tatsächlichen Wert zu erhalten, den ich suche? (Die gesamte prozentuale Prozessorzeit für diesen bestimmten Prozess)