Что такое счетчики производительности?


Что такое счетчики производительности и как они работают? Являются ли они специфичными для Windows или они являются концепцией уровня операционной системы и доступны также в Linux и т. д.?

Как я могу использовать их в моем приложении .NET для измерения времени выполнения различных частей моего приложения?

Я погуглил, но на удивление не нашел никаких отличных ссылок.

2 3

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");