Производительность отладки и отслеживания .NET: хитрости / скрытые возможности? - PullRequest
1 голос
/ 29 мая 2009

Что вы думаете о том, какие методы я должен использовать при анализе производительности и оптимизации каждого приложения, выполненного в технологиях .NET?
Кроме того, какие методы отладки / трассировки, как вы знаете, могут быть эффективными?
Считаете ли вы, что в крупномасштабных проектах необходимо иметь собственные классы отладки / диагностики?
Вы рекомендуете использовать профилировщики приложений или любые другие сторонние приложения?

Другая проблема, довольно связанная с: Как я могу получить время, затраченное на выполнение метода?

Ответы [ 2 ]

1 голос
/ 04 июня 2009

Это очень общий вопрос :), но вот некоторые рекомендации

  1. Измерьте время запуска вашего приложения, если запуск представляет большую проблему для ваших клиентов, рассмотрите возможность использования службы Ngen, использование службы ngen (ngen.exe) значительно повышает производительность при холодном запуске
  2. Рабочий набор и куча GC: как выглядит ваша куча gc; особенно твой LOH. LOH в CLR не сжимается, поэтому важно, чтобы LOH был маленьким, или использовать методы кэширования для повторного использования объектов в LOH (куча больших объектов содержит объекты, размер которых превышает 85000 байт).
  3. Пропускная способность: сколько операций вы можете выполнить, какое время отклика для вашего приложения, если оно имеет пользовательский интерфейс, сколько запросов оно может обработать, если оно является серверным приложением .. и т.д.

Что касается диагностики и трассировки, вы можете использовать классы в пространстве имен System.Dignostics, например, TraceListner, вы также можете учитывать события ETW для ваших критических путей кода (хорошая трассировка событий для Windows в MSDN).

Вы можете создавать свои собственные пользовательские классы dignostic поверх встроенных классов в пространстве имен System.Dignostics.

Пара очень полезных инструментов, которые вам необходимо иметь в своей сумке для захвата, это VS Profiler и CLR profiler для профилирования времени и профилирования памяти соответственно.

Вы можете использовать профилировщик для общего представления о ваших «горячих» функциях, вы можете использовать класс StopWatch для измерения времени для некоторых выбранных методов или для синхронизации с высоким разрешением, вы можете использовать QueryPerformanceCounter и QueryPerformanceFrequency Windows APIs

1 голос
/ 02 июня 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...