У меня есть приложение winforms, которое обычно занимает около 2-4% ЦП. Мы наблюдаем скачки загрузки ЦП до 27% ограниченное количество раз. Каков наилучший инструмент профилирования, чтобы определить, что на самом деле вызывает этот всплеск. Мы используем dottrace, но я не вижу, как это точно сопоставить с пиками процессора?
Цените помощь





Раньше я использовал два инструмента профилирования - профилировщик RedGate ANTS и встроенный профилировщик из Visual Studio Team System.
Прошло некоторое время с тех пор, как я использовал профилировщик RedGate (http://www.red-gate.com/products/ants_profiler/index.htm), хотя совсем недавно я использовал встроенный в Visual Studio 2008.
При этом я чувствовал, что продукт RedGate более интуитивно понятен в использовании. Одна вещь, которая расстраивала меня, когда я использовал продукт RedGate, заключалась в том, что я не мог указать профилировщику только профилировать мой код, начиная с определенной точки - у меня был удар производительности, которого нельзя было достичь, пока не было уже выполнено и поэтому испортил мои результаты. Возможно, с тех пор они добавили эту функцию.
Встроенная версия для Visual Studio доступна только в их высокопроизводительных версиях продукта. Кто-то поправит меня, если я ошибаюсь, но я не думаю, что даже в «Профессиональной» версии есть профайлер. В настоящее время я использую Team System Developer Edition, в которой делает есть инструменты анализа кода.
Одна вещь, которую делает версия VS, - это возможность приостановить профилирование и даже запустить приложение с приостановленным профилированием, так что вы действительно можете сосредоточиться на производительности чего-то очень конкретного. Это может быть чрезвычайно полезно, когда вы пытаетесь понять результаты анализа.
Обновлено: оба инструмента покажут вам использование памяти и количество вызовов определенного метода, а также сколько времени было потрачено на каждый метод. Насколько мне известно, они не показывают использование ЦП в любой момент времени. Однако, вероятно, существует сильная корреляция между использованием ЦП и количеством времени, затрачиваемого на данный блок кода.
Если вы можете последовательно дублировать всплески ЦП, вызывая определенные действия в приложении, то я бы попытался заполучить профилировщик VS, запустить приложение с паузой профилирования, включить профилирование прямо перед тем, как вы сделаете то, что обычно приводит к всплеск и изучите эти результаты.
Это, конечно, предполагает, что у вас есть какое-то детерминированное поведение для воссоздания спайков. Если нет ... вы можете рассматривать поточные процессы или сборку мусора в качестве кандидата на снижение производительности.
Я нашел DevPartner от Compuware http://www.compuware.com/ как отличный инструмент для профилирования. К сожалению, похоже, что в настоящее время они не поддерживают VS 2008.
Кроме того, действительно ли этот всплеск беспокоит? А на каком железе вы это наблюдаете? Повышение до 27% на четырехъядерном процессоре может вызывать беспокойство, но не на 800 МГц P3.
Как долго он остается в шипах? @Matt имеет большое значение, что сборщик мусора может быть виноват. Или, возможно, переключение на диск.
Влияет ли это на общую производительность системы в течение длительного времени или всего на пару секунд время от времени?
Не то чтобы решение этой проблемы не беспокоило, но насколько это важно?
Вы также можете многое узнать о своем приложении с помощью Sysinternal Process Explorer и Perfmon (например, всплеск происходит на GC).
Если ваше приложение является однопоточным, лучший инструмент для профилирования - это ваша IDE.
Добавлено: Может быть, это очевидно, но процент использования ЦП - не очень понятное понятие. Когда ваша программа вообще работает, она на 100%. Когда это не так, это 0%. Таким образом, частичные проценты должны быть основаны на некотором сглаживающем интеграле по времени. Однако, как бы то ни было, вы видите всплеск. Некоторые профилировщики позволяют сосредоточиться на таком всплеске и анализировать именно этот интервал.
Лучший инструмент, который покажет вам всплески и позволит глубже понять, что их вызывает, - это инструменты Xperf / Xperfview.
Проверить http://msdn.microsoft.com/en-us/performance/cc825801.aspx
и http://msdn.microsoft.com/en-us/library/cc305221.aspx
Эти инструменты основаны на технологии ETW (отслеживание событий для Windows), которая дает вам очень точное представление о том, что происходит в вашем процессе и в системе в целом.
Эти инструменты также позволяют захватывать следы для посмертного анализа, а также функцию прикрепления / отсоединения. Надеюсь это поможет.
Была ли эта информация вам вообще полезна?