Где я могу найти профилировщик приложений C# для использования в Visual Studio 2008?

Я ищу профилировщик для моего приложения C #, разрабатываемого в Visual Studio 2008. Я ищу что-то недорогое (предпочтительно с открытым исходным кодом) и которое можно интегрировать в VS2008. Я нашел Visual Studio Profiler, но не знать, как его использовать. Я установил автономную версию, которая зависит от Visual Studio (не для автономной работы, я думаю?), но в меню «Инструменты» ничего никогда не появляется, как говорится в их прохождении.


person Malfist    schedule 26.05.2009    source источник


Ответы (8)


Вот список профайлеров .Net с открытым исходным кодом.

Я использовал и мне нравится Ants-Profiler от Red Gate, но он стоит денег (очень того стоит, ИМХО).

person gbc    schedule 26.05.2009

Visual Studio Profiler является частью только Team System. Он не входит в состав Visual Studio Professional.

Существует бесплатный профилировщик .NET под названием nprof, но он еще не выпущен и может изменчивый. Кроме того, есть отличные коммерческие профилировщики, такие как ANTS Profiler от Red Gate. ; однако это не низкая стоимость.

person Jeff Yates    schedule 26.05.2009
comment
Я никогда не использовал ANTS Profiler, но вы не ошибетесь с чем-либо, сделанным Red Gate, если у вас нет бюджета. - person TheTXI; 26.05.2009
comment
Если я правильно помню, у Red Gate есть 14-дневная пробная версия. Я определенно советую вам использовать его. Я посоветовал это другим людям, и в итоге они купили лицензию. - person bastijn; 26.05.2009

Воспользуйтесь профилировщиком EQATEC, бесплатным и хорошо работающим. Также работает для ASP.NET и .NET CF.

person jspru    schedule 26.05.2009
comment
Вау, это выглядит хорошо. Я попробую и посмотрю, сможет ли он конкурировать с ANTS. +1 от меня. - person tobsen; 26.05.2009

Я рекомендую dotTrace. Не бесплатно, цена 170 евро за персональную лицензию.

http://www.jetbrains.com/profiler/index.html

person MicTech    schedule 26.05.2009
comment
Мы используем dotTrace в нашей компании. Он очень прост в использовании и очень полезен. Я рекомендую это :) - person Beatles1692; 27.05.2009
comment
Я также использую его пробную версию, пока она не продлится :), и мне нравится ее простота и то, как она управляет многоязычными проектами. stackoverflow.com/questions/906915/c-code-performance/< /а> - person Daniel Daranas; 27.05.2009
comment
Я использовал это, и оно очень хорошо работает для профилирования производительности, если ваше решение не слишком велико. Я попытался запустить 5000 модульных тестов в режиме профилирования, и мне не хватило памяти (а у меня 8 гигабайт на моем компьютере для разработчиков). Таким образом, dottracer требует больших ресурсов. - person crauscher; 27.05.2009

Я успешно использовал AQtime.

Как уже упоминалось, ANTS также является хорошим вариантом.

person TWA    schedule 26.05.2009

Если вы просто хотите выполнить профилирование памяти, отлично подойдет профилировщик памяти .NET. У него есть пробный период и небольшая стоимость после этого — оно того стоит. Если вы хотите потратить немного денег, DevPartner Studio очень хороша.

person JP Alioto    schedule 26.05.2009
comment
На самом деле я сейчас просто ищу время выполнения для каждого метода, но профилирование памяти может появиться позже. - person Malfist; 26.05.2009
comment
Я могу поручиться за .NET Memory Profiler. Кто сказал, что в .NET не может быть утечек памяти! - person Mark Lindell; 26.05.2009
comment
это не утечки памяти в традиционном смысле, но да, они могут быть. GC не идеален даже в java. - person Malfist; 26.05.2009
comment
@Малфист: Верно. Я считаю, что это очень полезно для выявления накоплений с течением времени (например, коллекций, которые не очищаются). Так что это больше похоже на поиск мест, где ваш код неправильно предотвращает сборщик мусора, чем на проблемы с самим сборщиком мусора. :) - person JP Alioto; 26.05.2009

В этой ветке stackoverflow обсуждаются профилировщики для .NET. Я использовал профилировщик CLR некоторые, и это помогло мне решить несколько проблем с производительностью в программном обеспечении. Может стоит попробовать. Microsoft опубликовала руководство по использованию CLR Profiler.

person Fredrik Mörk    schedule 26.05.2009

Для настройки производительности, в отличие от диагностики памяти, есть простой способ.

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

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

Я беру несколько сэмплов N, обычно не более 20. Если где-то в середине стека есть горячая точка или мошеннический вызов метода, занимающий какую-то долю F времени выполнения, то количество сэмплов, которые это покажут, равно NF +- sqrt (NF (1-F). Например, если N = 20 и F = 0,15, количество выборок, которые покажут это, равно 3 +- 1,6, поэтому у меня есть отличные шансы найти его.

Часто F больше похож на 0,5, поэтому количество образцов, показывающих его, составляет 10 +- 2,2, поэтому его нельзя пропустить.

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

Обычно есть несколько мест для оптимизации. Если в задаче 1 F1=0,5, а в задаче 2 F2 = 0,1, то при устранении проблемы 1 (удвоении скорости работы программы) F2 обычно увеличивается на этот коэффициент, до 0,2. Таким образом, вы можете сделать это снова и быть уверенным, что найдете проблему 2. Таким образом, вы можете сбить последовательность проблем, пока код не станет практически оптимальным.

person Mike Dunlavey    schedule 27.05.2009
comment
Ха-ха, получайте удовольствие, увидимся через несколько десятилетий! Что произойдет, если у вас есть миллионы звонков? - person leppie; 27.05.2009
comment
@leppie: Простите? Если вы имеете в виду миллионы звонков в секунду, это не имеет значения. Важен процент времени. Кстати, это можно сделать за долю времени, необходимого для установки и изучения инструмента. - person Mike Dunlavey; 27.05.2009
comment
Было ли это отрицательное мнение из-за того, что он не думал, что это сработает, или просто не понравилось? - person Mike Dunlavey; 27.05.2009
comment
Этот метод отлично подходит для поиска больших неэффективностей в коде. И это экономит время на профилировщике (хотя это единовременные затраты). Проблема с этим методом заключается в том, что у вас есть 10 отдельных задач, каждая из которых вносит 1% ненужного времени выполнения. Общая экономия составляет увеличение скорости на 10%, что было бы довольно неплохо, но поиск любого из замедлений занял бы очень много времени. Даже взяв 100 образцов с 1% = 1 +/- 0,995 раза, вы найдете один из этих вызовов с помощью этого метода. Профилировщик, который позволяет сортировать вызовы функций, очень быстро приведет вас к нужной функции. - person Robert Gowland; 27.05.2009
comment
@Robert: Мой опыт показывает, что проблемы имеют что-то вроде логарифмически нормального распределения, от большого к маленькому. Какой бы из них вы ни исправляли, остальные увеличиваются в процентном отношении, так что что-то может быть маленьким для начала, но становится больше по мере того, как вы решаете другие. В любом случае, если в коде действительно есть место только для 10-процентного ускорения, это довольно близко к оптимальному. Я видел такие факторы, как 10-40 раз. - person Mike Dunlavey; 27.05.2009
comment
@Robert: Когда я дохожу до убывающей отдачи, это не потому, что мне не говорят, на что уходит время. Это потому, что для исправления того, что требует времени, требуется серьезный рефакторинг или редизайн. - person Mike Dunlavey; 27.05.2009
comment
... извините, что добавил еще один ответ. Профилировщик, который позволяет сортировать вызовы функций, очень быстро приведет вас к нужной функции. Я все жду профилировщика, который будет делать это, в частности, ранжировать ВЫЗОВЫ функций (не целых функций) по их дробному времени пребывания в стеке. (Я собираюсь создать такой пользовательский интерфейс, как делал в прошлом, потому что в таких проектах, как наш, каждый образец может иметь глубину 30 слоев.) - person Mike Dunlavey; 27.05.2009