Что такое счетчики производительности?
Что такое счетчики производительности и как они работают? Являются ли они специфичными для Windows или они являются концепцией уровня операционной системы и доступны также в Linux и т. д.?
Как я могу использовать их в моем приложении .NET для измерения времени выполнения различных частей моего приложения?
Я погуглил, но на удивление не нашел никаких отличных ссылок.
2 ответа:
Счетчики производительности, как концепция, являются измеримыми, отчетными метриками, которые ядро или приложение может сообщить операционной системе. Такие показатели, как загрузка процессора, использование памяти, пропускная способность сети и т. д., являются примерами счетчиков производительности. Это не просто аппаратное обеспечение; веб-сервер может сообщить, сколько сеансов он обрабатывает, или сервер БД может сообщить количество подключений и запросов в секунду. в Windows, по крайней мере, вы можете создать свой собственный для вашего приложения; если у вас есть сервер приложение, обрабатывающее входные файлы в базу данных, может сообщать о своей пропускной способности в файлах / с или КБ / С. Вы можете сообщать о времени безотказной работы сервера в последовательных часах или в процентах от времени с момента его установки.
Способы доступа к счетчикам производительности или их создания будут довольно сильно различаться в зависимости от среды разработки (язык, фреймворк, библиотеки) и целевой ОС, но я не могу представить себе современное ядро, которое не может хотя бы сообщить о производительности оборудования. числа.
Счетчики производительности в .Net специфичны для Windows. Я не думаю, что использование счетчиков производительности для измерения времени выполнения-это хороший способ, это сделает вещи более сложными, чем они должны быть, я подозреваю. В Visual Studio содержит средства производительности, если вы идете смотреть - других приложений Windows - меню обозревателя производительности окне обозреватель производительности и вы можете нажать на кнопку Запустить мастер производительности. Другая возможность-использовать класс секундомера, который будет использовать таймер высокого разрешения, если он есть на вашем компьютере:
Int64 nanoSecPerTick = (1000L * 1000L * 1000L) / Stopwatch.Frequency; Stopwatch timer = Stopwatch.StartNew(); // execute the code that you want to time timer.Stop(); Int64 nanoSec = timer.ElapsedTicks / nanoSecPerTick; // or if you don't need such fine grained timing: Int64 milliSec = timer.ElapsedMilliseconds; Console.Write("Elapsed time: " + nanoSec + "ns");