Как рассчитать загрузку процессора программно? - PullRequest
2 голосов
/ 09 апреля 2010

У меня есть программа для сравнения, которая вычисляет время (в миллисекундах и тиках) для сохранения в Entity Framework 4.0. Есть ли способ рассчитать нагрузку на процессор? Я предполагаю, что мне нужно будет запросить Windows, чтобы узнать частоту моего процессора, сколько ядер и т. Д. Это звучит правильно? Если да, то какая часть .NET Framework связана с запросом системы? Я предполагаю System.Diagnostics?

Спасибо

Scott

Ответы [ 3 ]

3 голосов
/ 09 апреля 2010

http://msdn.microsoft.com/en-us/library/3t90y2y1(v=VS.90).aspx

Кажется, что вы ищете

Этот код, который я нашел, может помочь:

using System.Diagnostics;
PerformanceCounter oPerf1 = new PerformanceCounter();
oPerf1.CategoryName = "Processor";
oPerf1.CounterName = "% Processor Time";
oPerf1.InstanceName = "0";
int I;
for (I = 0; (I <= 100); I++) {
    SomeListBox.Items.Add(oPerf1.NextValue);
    Threading.Thread.Sleep(20);
}
3 голосов
/ 09 апреля 2010

Вы можете использовать PerformanceCounter (для загрузки системы).

Или лучше:

var p = System.Diagnostics.Process.GetCurrentProcess();
var span = p.TotalProcessorTime;

Вы должны будете связать это с настенным временем, чтобы получить процент. Также см. UserProcessorTime.


Edit:

Если подумать, если вы хотите провести сравнительный анализ, не лучше ли измерять только затраченное время на выполнение фрагмента кода, например, класса System.Diagnostics.Stopwatch?

2 голосов
/ 09 апреля 2010

Вы можете получить данные счетчиков производительности, но, несомненно, лучше использовать инструмент профилирования. Загрузка ЦП сама по себе не является полезным измерением. Вы хотите знать, какие биты в вашем коде самые медленные по сравнению с другими битами, а какие быстрые, но вызываются слишком много раз и т. Д.

...