Или, может быть, вопрос больше похож на «Что я здесь делаю явно неправильно?»
У меня есть тестовое приложение, которое ничего не делает, кроме как наблюдает за использованием своего собственного процессора. Это выглядит примерно так:
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;
}
}
Свойство CpuUsage читается очень часто. Вот в чем дело:
На моей машине Environment.ProcessorCount
выдает значение 2. Однако значение, полученное со счетчика, часто достигает 800. Я предполагаю, что оно связано с несколькими ядрами и гиперпоточностью. Что я могу сделать, чтобы получить реальное значение, которое я ищу? (Общее% времени процессора для этого конкретного процесса)