Как измерить время выполнения всех методов в.NET Core?
Мне нужно отладить производительность медленного приложения, которое иногда замедляется, а иногда работает просто отлично.
Это действительно сложно, и я не могу найти, в чем проблема.
Я думал о ткачестве IL и таких инструментах, как PostSharp. Но так как я хочу только очень конкретного требования, я подумал, что, возможно, есть другие способы / методы, с которыми я не знаком.
Моя задача - записать общее время выполнения каждого метода. Как я могу получить это? IL ткачество является единственным вариантом?
2 ответа
Вы делаете это с помощью профилировщика, например dotTrace для C#. Если у вас есть Resharper Ultimate, dotTrace включен.
Профилировщики.NET измеряют не только время всех ваших методов, но и время сборки мусора.NET.
Также есть профилировщик, доступный в более новых версиях Visual Studio.
Хотя это можно было бы сделать и с помощью IL-ткачества, вы не скомпилируете дополнительную версию только для этой цели. С помощью профилировщика вы можете изменять настройки без перекомпиляции кода каждый раз.
Средства профилирования, упомянутые в других ответах, позволяют анализировать производительность приложения в контролируемой среде на компьютере разработчика. Это может помочь вам найти, какие разделы кода нуждаются в оптимизации.
Однако вы также можете отслеживать производительность приложений в производственной среде. Это может помочь вам выяснить, какие другие факторы, внешние по отношению к вашему коду и специфичные для среды, влияют на производительность.
Для второго варианта использования вы можете проверить PostSharp Diagnostics Framework ( http://doc.postsharp.net/logging). Он позволяет вам включить детальную регистрацию в вашем приложении, включая время выполнения метода, и легко настраивается. Ведение журнала можно включать и выключать в конфигурации, поэтому нет необходимости создавать две отдельные сборки приложения.
Другой вариант - инструмент мониторинга производительности приложений, установленный в производственной среде. Быстрый поиск даст вам примеры, такие как New Relic APM, DynaTrace, AppDynamics и другие.
В конце концов, вам остается сделать выбор конкретного инструмента на основе вашего варианта использования и бюджета.