Правильный способ использования PerformanceCounter в .NET для измерения загрузки процессора
Я хочу измерить производительность моего бизнес-класса в веб-сервисе. Как я могу сделать это с помощью кодирования?
Я хочу знать, сколько ЦП использует мой бизнес-класс для выполнения своей работы и как меняется производительность, если веб-сервис получает несколько одновременных вызовов сервиса.
Я не хочу измерять производительность моего веб-сервиса; Я просто хочу знать, как работает мой бизнес-класс.
My thought:
Прочитав некоторые блоги, я решил написать фрагмент кода, который создастPerformanceCounter
как показано ниже. Из этого кода я могу создать несколько потоков в одномfor
петля. Каждый поток назовет мой класс. И в том жеfor
цикл, я буду называтьNextValue()
метод на встречном экземпляре.
System.Diagnostics.PerformanceCounter CpuCounter = new System.Diagnostics.PerformanceCounter();
CpuCounter.CategoryName = "Process";
CpuCounter.CounterName = "% Processor Time";
CpuCounter.InstanceName = Process.GetCurrentProcess().ProcessName;
Questions:
Is this approach correct? Shall I use "Process" category or "Processor" category? How can I get performance data to create some report out of it? e.g. With 100 simultaneous threads, CPU usage is 70%, with 200 threads it goes upto 90% etc. My business logic ends very quickly. And on the other hand,NextValue()
method gives correct value after an interval of one second as mentioned in this blog. How can I handle this?
Sometimes, NextValue()
method gives value above 100. Does this mean CPU usage is more than 100%? (I think, value of this counter should not be interpreted as % usage of the CPU. Am I correct?)
Примечание: я использую Windows 7 Premium и процессор Intel Core i5. Это первый раз, когда я использую счетчики производительности. Так что некоторые вопросы могут быть глупыми.