Как я могу профилировать производительность приложения .NET, уже развернутого для клиента? - PullRequest
3 голосов
/ 06 января 2009

У меня есть несколько клиентов, у которых мое приложение WinForms работает не так хорошо, как у других клиентов. Я использую dotTrace JetBrain здесь, в офисе, но это не помогает мне находить узкие места на машинах наших клиентов. Как я могу профилировать производительность приложения .NET, уже развернутого для клиента? Существуют ли какие-либо инструменты профилирования с распространяемым компонентом, которые позволяют мне создавать результаты профилирования, которые нельзя использовать, пока я не верну результаты (снимок в dotTrace) обратно в инструмент полного профилирования?

Обновление: Поскольку NProf распространяется свободно, я думаю о развертывании его на рабочей станции клиента. Я сообщу о результатах здесь.

Ответы [ 2 ]

3 голосов
/ 06 января 2009

Я не знаком с dotTrace, но я использовал инструментарий и инструменты профилирования Visual Studio 2008 в контексте Visual Studio и считаю, что они распространяются с .NET 3.5 SDK.

Инструмент VSInstr.exe: http://msdn.microsoft.com/en-us/library/ms182402.aspx будет инструмент развернутого двоичного файла.

VSPerfCmd: http://msdn.microsoft.com/en-us/library/ms182403.aspx может захватывать данные о производительности из инструментированного приложения.

Я никогда не делал это напрямую и исключительно из командной строки, поэтому я не могу предложить вам большую помощь, но я подумал, что это был еще один вариант для вас, по крайней мере.

1 голос
/ 06 января 2009

Так что я думаю, что вам может понадобиться какой-то метод измерения эффективности размещения рекламы. Какими бы неблагодарными они ни были, я мог бы взглянуть на добавление счетчиков производительности в ваше приложение. См. System.Diagnostics . Я широко использовал для мониторинга приложений в развертывании. Я обнаружил, что профилировщики в то время как круто иногда скрывают определенные проблемы из-за их накладных расходов. Например, если ваше приложение обращается к базе данных, а диск работает медленно, в результате чего запросы выполняются дольше, что может быть неочевидно в профилировщике, поскольку приложение будет работать медленнее в целом.

Для клиентской стороны, если ваше приложение не требует административного доступа при установке, я мог бы сделать счетчики производительности частью «режима диагностики», поскольку для их установки требуется административный доступ. Возможно, вы захотите установить счетчики производительности, чтобы измерить такие вещи, как продолжительность вызовов базы данных и сервисов, размер структур данных, которые могут расти, и количество возникающих сбоев.

Мы уже знаем, что ваш код работает, так как на некоторых клиентских установках он работает нормально. Так что подумайте о добавлении инструментов в ваше приложение. Это один из тех неопрятных, но важных элементов написания надежного программного обеспечения, как хорошее ведение журнала. Это не весело, но, на мой взгляд, это нужно сделать. Часто это единственное, что дает вам представление о том, что ваше приложение делает при развертывании. Текущее приложение, над которым я работаю, увеличилось с 20 счетчиков производительности в Rev 1 до 150 в Rev 2. Я не слежу за большинством из них все время, но за то, что предупреждаю меня о проблемах с производительностью и надежностью, они того стоили. .

...