Надежный профилировщик процессора для .NET 3.5 под Win64 с поддержкой командной строки? - PullRequest
2 голосов
/ 14 марта 2009

Я ищу профилировщик процессора для поддержки .NET

  • многопоточные приложения.
  • (двойные) четырехъядерные процессоры.
  • профилирование выборки.
  • 64 бит ОС.
  • API командной строки.

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

  • Похоже, что YourKit не поддерживает командную строку.
  • dotTrace 3.1 завершает работу с 64-битной ОС.

Я не пробовал Intel VTune до сих пор. Любое просвещенное предложение?

Ответы [ 4 ]

3 голосов
/ 18 апреля 2009

Потоки имеют тенденцию сбивать с толку большинство профилировщиков тем, что они не уверены, как подсчитать время, когда один поток заблокирован в ожидании другого, и время, в течение которого поток ожидает работу (если вы не используете пул потоков).

В нашем опыте вы должны проверить два профилировщика: 1. Eqatech имеет бесплатный профилировщик, который выполняет внедрение кода для профилирования. Это работает только до уровня метода, но работает на 64-битной и может дать вам представление о том, куда уходит ваше время. 2. Профилировщик ANT Red-Gate - это лучшее, что мы использовали для детализации временных параметров на уровне линии, что очень важно, если у вас есть сценарий, когда потоки блокируются, ожидая друг друга значительную часть своего времени выполнения.

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

Профилировщик Eqatech изменяет ваш скомпилированный IL, поэтому всякий раз, когда вы повторно запускаете этот IL, вы получаете новый файл трассировки производительности, поэтому он должен соответствовать вашему сценарию командной строки. Я считаю, что ANT может работать аналогично.

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

1 голос
/ 14 марта 2009

Redgate имеет профилировщик, если я правильно помню, не могу сказать вам, есть ли у вас все, что вам нужно, но попробовать? :)

0 голосов
/ 16 марта 2009

Какова ваша цель?

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

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

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

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

Я знаю, что Java позволяет вам остановить все потоки одновременно и вывести их стеки вызовов. Я думаю, что среда разработки .net допускает то же самое.

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

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

0 голосов
/ 14 марта 2009

- РЕДАКТИРОВАТЬ 2 --- Другой возможный вариант (но тот, который потребует больше усилий) будет использовать NProf и просто настроить источник, чтобы вырезать графический интерфейс?

AQTime достаточно хорошо поддерживает приложения командной строки на 64-битных ОС.

--- РЕДАКТИРОВАТЬ ---

AQTime также поддерживает API командной строки. Он имеет возможность запустить проект, профиль и выйти автоматически. Я считаю, что он будет соответствовать всем вашим критериям и поддерживает управляемые + собственные кодовые базы.

Из справки AQTime в командной строке:

"Как видите, используя аргументы командной строки, вы можете запустить AQtime, загрузить в него проект, запустить профилирование и закрыть AQtime после его завершения. Все это дает вам возможность интегрировать AQtime в автоматизированные тесты вашего Например, запустив эти тесты после каждой сборки приложения, вы можете легко увидеть, вызвали ли изменения в коде приложения узкие места в производительности или неэффективное использование памяти. "

...