#c# #.net-2.0 #wmi
#c# #.net-2.0 #wmi
Вопрос:
Если я хочу добавить в свой код некоторые инструменты для получения показателей, например, сколько времени потребовалось для выполнения определенного метода, у кого-нибудь есть рекомендации для встроенной Windows или любой сторонней библиотеки?
Ответ №1:
Я видел, как это делается с помощью платформы AOP PostSharp, подключенной к счетчикам производительности Windows ( System.Diagnostics.PerformanceCounter
). Один из их вводных фрагментов примера кода показывает, как это сделать:
http://www.sharpcrafters.com/solutions/performance
Это может быть хорошим вариантом, если вы хотите развернуть эти измерения в рабочей среде и измерить производительность в реальном времени (для диагностики работающей системы).
Если вы просто хотите найти узкие места в своем коде и вам не нужно проводить оперативную диагностику, я предлагаю вам просто использовать профилировщик, такой как встроенный в VS или Ants Profiler (как уже предложил Крис). Затем запустите отредактированную копию ваших производственных данных в вашем коде, чтобы ваши показатели производительности соответствовали производительности.
Комментарии:
1. Мне не обязательно отслеживать их в режиме реального времени. Моя проблема в том, что приложение запущено в 10 разных местах расположения клиентов. И данная функциональность работает медленно в 3 из этих 10 местоположений. Я не могу профилировать приложение в этих местах расположения клиентов, но если у меня есть какой-то тип инструментария, это даст мне некоторое представление о том, какие методы занимают много времени.
2. @Silverlight: если он уже запущен, и вы не можете повторно развернуть, то вы можете застрять. Но если вы можете повторно развернуть, то счетчики производительности являются стандартным способом, и вы можете настроить свой код с помощью этих счетчиков производительности через AOP. Я использовал здесь «реальное время» в неправильном смысле — я имею в виду, что вы можете проводить измерения в реальном времени по вызовам в работающей системе, а не полагаться на дублирование одних и тех же сценариев в автономном режиме. Я отредактировал свой ответ, чтобы удалить неправильный термин 🙂
Ответ №2:
Если вы хотите это во время выполнения, вам, вероятно, следует использовать профилировщик в автономном режиме. Я бы избегал делать какие-либо инструменты, где это возможно, поскольку это требует времени и, следовательно, вызывает больше проблем с производительностью.
В Google есть профилировщик RedGate ANTS или JetBrains dotTrace. Если у вас есть VS2010 Premium, он имеет встроенный. Это даст вам представление о том, что происходит на уровне метода с точки зрения времени.
Ответ №3:
Как правило, профилировщик позаботится об измерении производительности.
Если вам нужно самостоятельно измерить время, часто достаточно секундомера с какой-либо трассировкой.