Нахождение узких мест в приложении - PullRequest
7 голосов
/ 22 августа 2010

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

Ответы [ 4 ]

9 голосов
/ 22 августа 2010

Возможно, вы захотите запустить несколько счетчиков производительности , чтобы отслеживать использование ЦП и статистику памяти и выяснять, что происходит.

Если это не приводит к каким-либо очевидным ответам, пришло время приступить к профилированию.

JetBrains dotTrace имеет 30-дневную бесплатную пробную версию. Это неплохой профилировщик памяти и производительности, который вы, возможно, захотите проверить.

Microsoft CLR Profiler бесплатен.

Если вы еще ничего не придумали, пришло время разбить большие орудия: WinDbg . Если вы зайдете так далеко, вы найдете блог Тесс чрезвычайно полезным.

6 голосов
/ 22 августа 2010

Очень хороший бесплатный инструмент, и он у вас уже есть. Единственный недостаток в том, что для начала он может быть не интуитивным.

Когда программа работает медленно, приостановите ее под IDE. Изучите стек вызовов. (Я отключаю отображение аргументов; меня интересуют только конкретные строки кода. Я копирую весь стек в текстовый редактор, например блокнот.) Сделайте это несколько раз. Чем он медленнее, тем меньше сэмплов вам понадобится, прежде чем вы увидите проблему.

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

Я попытаюсь объяснить, почему это работает. Во-первых, общая концепция «узкого места» серьезно вводит в заблуждение. Программное обеспечение не медленное, потому что оно имеет ограничения или «горячие» места. Конечно, он может иметь ошибки в кэше и так далее, но главная причина он медленен в том, что делает больше, чем нужно - часто лот больше.

Это происходит в джункетах вызова вложенных функций, с оправданиями все более удаленными. Это проявляется как дерево вызовов, которое гораздо более пушистое, чем необходимо. Все, что вам нужно сделать, это найти большие ветви, которые вы можете обрезать. Вот что делает техника паузы.

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

Хорошо быть скептиком, но вы можете быть удивлены, насколько хорошо это работает.

1 голос
/ 22 августа 2010

Эта страница от Адама Кальдерона ссылается на некоторые страницы блога MSDN по профилированию.

Однако большинство (если не все), похоже, относятся к Visual Studio Team System. Поэтому, если у вас есть доступ к этой версии программного обеспечения, вы получаете некоторые инструменты «бесплатно».

0 голосов
/ 22 августа 2010

DevPartner для C ++ my MicroFocus (ранее Compuware) имеет профилировщик производительности, который был на полпути приличным.Intel делает V-Tune, который делает то же самое.(Я думаю, что это Intel ... Я никогда не использовал его).Мой любимый - тот, который поставляется с Visual Studio Team Edition.Это великолепно.Вам также следует создать собственный код и написать автоматические тесты, чтобы вы могли сравнить одну сборку с другой.

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