Мнение? Да. Пока вы решаете, какой профилировщик купить или нет, give this a try.
ADDED: @Max: Пошаговые инструкции. В IDE есть кнопка «пауза». Запустите приложение в среде IDE, и пока оно субъективно медленно, то есть пока вы его ждёте, нажмите кнопку «пауза». Затем получите снимок стека вызовов.
Чтобы сделать снимок стека вызовов, то, что я делаю, отображает его (это одно из окон отладки). В параметрах IDE вы можете найти параметры для отображения в представлении стека. Я отключу опцию для отображения аргументов функции, потому что это делает строки слишком длинными. Меня интересует номер строки, где происходит вызов, и имя вызываемой функции. Затем в представлении стека вызовов вы можете сделать «Выбрать все», а затем «Копировать», а затем вставить его в «Блокнот». Я знаю, это немного неуклюжий, но я записывал их вручную.
Я беру несколько образцов таким образом. Затем я смотрю на них для строк, которые появляются на более чем одном образце, потому что это время. Некоторые из них просто необходимы, как «называть главное», но некоторые из них не являются. Это золотые самородки. Если я их не найду, я продолжаю брать образцы, примерно до 20. Если я еще не найду (очень необычно), к тому времени программа довольно хорошо оптимизирована. (Ключевым моментом является то, что каждый раз, когда вы делаете это, программа становится быстрее, и при этом оставшиеся проблемы с производительностью становятся относительно большими & проще найти. Т.е. программа не только ускоряется с определенным отношением R, но и остальными проблемами побольше, в процентах, по тому же отношению.) *
Еще одна вещь, которую я делаю в этом процессе, - спросить себя, что делает программа, и почему в этом образце. «Почему» очень важно, потому что именно так вы говорите, действительно ли линия необходима или ее можно заменить чем-то менее дорогостоящим. Если я не уверен, почему он там, я немного пошаговаюсь, возможно, посмотрю на данные или, возможно, вернусь к нескольким уровням (shift-F11), пока не пойму, что он делает. Вот и все.
Существующие профилографы могут помочь в этом процессе, если они фактически выполняют выборку стека, сохраняют образцы, ранжируют строки по тому, какой процент образцов содержат их, а затем позволяют подробно изучать отдельные образцы. Может быть, они когда-нибудь появятся, но теперь их нет. Они зависают по таким вопросам, как эффективность и измерение.
* Предположим, что ваш код тратит 90% своего времени на выполнение X, и 9% его времени делают Y, оба не нужны. Возьмите небольшое количество образцов, и вы увидите X, но, вероятно, не Y. Если вы исправите X, вы получите 10-кратное ускорение. Повторите выборку (возможно, вам придется обернуть внешний цикл вокруг программы, чтобы вы могли брать образцы). Теперь вы видите Y с уверенностью, потому что теперь он принимает 9% x 10x = 90%. Фиксация дает вам еще 10x, для полного 100x ускорения.
Eqatec - бесплатный профайлер .Net (http://www.eqatec.com/tools/profiler), если стоимость является проблемой. Никогда не пробовал, хотя, так что не могу прокомментировать, насколько это хорошо. – adrianbanks
Я дал короткую попытку, но профайлер yourkit кажется более удобным для работы. Я не против платить за программное обеспечение, однако, вероятно, лучший профилировщик (как прочитанный в Stackoverflow) от redgate слишком дорог для меня. Так что менее 100 евро будет в порядке. – Max
Лучшим профайлером для .net на сегодняшний день является F1, который находится в командной системе Visual Studio. Я использовал redgate экстенсивно и нашел его в основном бесполезным для профилирования любых трудных проблем. Отсутствие информации о ядре о таких вещах, как контекст и переключатели потоков, затрудняет работу со сложными многопоточными приложениями. –