Вопрос по c#, performance, .net – Каков наилучший способ устранения проблем с производительностью?

6

Я пишу плагин для другой программы на C # .NET, и у меня возникают проблемы с производительностью, когда команды занимают намного больше времени, чем я. Плагин реагирует на события в хост-программе, а также зависит от служебных методов хост-программы SDK. Мой плагин имеет много рекурсивных функций, потому что я много читаю и пишу в древовидную структуру. Кроме того, у меня есть много подписок на события между моим плагином и хост-приложением, а также подписки на события между классами в моем плагине.

Как я могу выяснить, что занимает много времени для выполнения задачи? Я не могу использовать обычную отладку в стиле точки останова, потому что это не значит, что она не работает, а только потому, что она слишком медленная. Я настроил статический «LogWriter» класс, на который я могу ссылаться из всех моих классов, что позволит мне записывать метки времени в файл журнала из моего кода. Есть ли другой способ? Сохраняет ли visual studio какой-либо журнал с метками времени, который я мог бы использовать вместо этого? Есть ли способ просмотра стека вызовов после закрытия приложения?

Ваш Ответ

8   ответов
2

лучший метод также самый простой. Запустите его, и пока он работает медленно, нажмите «Пауза». Кнопка в IDE. Затем сделайте запись стека вызовов. Повторите это несколько раз.(Вот более подробный пример и объяснение.)

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

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

Люди, похоже, решают подобные проблемы одним из двух способов:

Try to get good measurements before doing anything.

Just find something big that you can get rid of, rip it out, and repeat.

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

1

http://en.wikipedia.org/wiki/Code_profiler#Use_of_profilers

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

http://csharp-source.net/open-source/profilers

4

Мой Профилировщик Список включает в себя ANTS, dotTrace и AQtime.

Однако, если присмотреться более внимательно к вашему вопросу, мне кажется, что вам следует провести некоторое модульное тестирование в то же время, когда вы выполняете профилирование. Возможно, начните с быстрого сканирования общей производительности, просто чтобы увидеть, какие области требуют наибольшего внимания. Тогда начните писать некоторые юнит-тесты для этих областей. Затем вы можете запустить профилировщик во время выполнения этих модульных тестов, чтобы получить согласованные результаты.

0

asp.net.

16

ANTS Performance Profiler.

Update: Вы также можете писать сообщения в контрольных точках, используяDebug.Write, Тогда вам нужно загрузитьDebugView приложение, которое отображает всю вашу строку отладки с точной отметкой времени. Это бесплатно и очень хорошо для быстрой отладки и профилирования.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
1

лучший & quot; Способ субъективен, мы можем только предложить возможные решения.

У меня был опыт использованияRedgate ANTS Performance Profiler который покажет вам узкие места в вашем приложении. Это определенно стоит проверить.

0

Совет Рико Мариани о том, как провести хорошее перф расследование.

1

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

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

Кроме того, было довольно много вопросов о профилировщиках в прошлом:http://www.google.com.au/search?hl=en&q=site:stackoverflow.com+.net+profiler&btnG=Google+Search&meta=&aq=f&oq=

Error: User Rate Limit Exceeded

Похожие вопросы