WPF Performance Suite

Пакет Windows SDK включает набор средств профилирования производительности для приложений Windows Presentation Foundation (WPF), который называется WPF Performance Suite. WPF Performance Suite позволяет анализировать поведение приложений WPF во время выполнения и определять возможные способы оптимизации. WPF Performance Suite включает в себя средства профилирования Perforator и Visual Profiler. В этом разделе описывается установка и использование Perforator и Visual Profiler из пакета WPF Performance Suite.

В этом разделе содержатся следующие подразделы.

  • Установка WPF Performance Suite

  • Запуск WPF Performance Suite

  • Perforator

  • Профилировщик Visual

Установка WPF Performance Suite

Далее описывается, как установить WPF Performance Suite.

  1. Если на компьютере установлен набор средств производительности Windows более ранней версии, удалите его.

  2. Установите пакет Windows SDK.

    В параметрах установки выберите флажок Набор средств для оценки производительности Windows в разделе Стандартных средства. Сведения о скачивании см. на странице загрузки пакета Windows SDK.

  3. После установки Windows SDK в меню Пуск выберите Все программы, Microsoft Windows SDK v7.1 и Средства.

  4. В окне "Средства" щелкните Установить набор средств для оценки производительности Windows.

    Появится мастер установки.

  5. Следуйте инструкциям на экране для установки набора средств для оценки производительности Windows.

    По умолчанию будут установлены следующие компоненты.

    • Анализатор производительности

    • Справка набора средств для оценки производительности Windows

    • GPUView

    • WPF Performance Suite

Запуск WPF Performance Suite

Следует запустить WPF Performance Suite перед запуском приложения, которое будет профилироваться. Для работы с WPF Performance Suite у учетной записи пользователя должны быть права администратора.

Далее описывается, как запустить WPF Performance Suite.

  1. В меню Пуск выберите Все программы и Набор средств для оценки производительности Microsoft Windows.

  2. Щелкните WPF Performance Suite.

  3. Если появится диалоговое окно контроля учетных записей, нажмите кнопку Да.

    Запустится пакет WPF Performance Suite.

При первом запуске WPF Performance Suite откроется диалоговое окно Добавление средств. В нем вы можете добавлять средства профилирования производительности. Чтобы добавить средство, выберите сборку, содержащую средство, и нажмите кнопку Проверить сборку. Диалоговое окно "Добавление средства" можно открыть в любое время, нажав кнопку Добавить средство в меню Файл. На следующем рисунке показано диалоговое окно "Добавление средств".

Диалоговое окно "Добавление средств"

Диалоговое окно добавления средств

По умолчанию в WPF Performance Suite входят следующие средства профилирования производительности.

Средство

Описание

Perforator

Анализирует поведение отрисовки.

Visual Profiler

Профилирует использование служб WPF, например обработку макета и событий, по элементам в визуальном дереве.

Убедитесь, что флажки Perforator и Профилировщик Visual установлены, а затем нажмите кнопку ОК.

Perforator

Perforator — это средство профилирования производительности для анализа отрисовки приложения WPF. В пользовательском интерфейсе Perforator отображается набор графиков, которые позволяют анализировать поведение визуализации в различных частях приложения, например частоту добавления "грязных" прямоугольников и частоту кадров. WPF использует методику отрисовки "грязных" прямоугольников — только изменившиеся части экрана отображаются на новом этапе отрисовки. Кроме того, Perforator предоставляет несколько параметров, которые можно использовать для поиска отдельных проблем отрисовки. Perforator также сообщает о целевых объектах отрисовки программного обеспечения и предоставляет ползунок для управления длительностью графиков. На рисунке ниже показан пользовательский интерфейс Perforator.

Пользовательский интерфейс Perforator

Диалоговое окно “Добавить инструмент”

Aa969767.collapse_all(ru-ru,VS.110).gifИспользование Perforator

Для использования средства Perforator запустите приложение WPF, которое требуется проанализировать. Затем щелкните вкладку Perforator, выберите меню Действия и щелкните Выбрать процесс. В диалоговом окне "Выбор процесса" выберите процесс приложения, который требуется проанализировать, а затем нажмите кнопку выбрать. Имя и идентификатор процесса появятся в верхней части вкладки Perforator. Выберите параметры отрисовки, которые необходимо проанализировать. Значения данных Perforator, такие как частота кадров, отражают поведение отрисовки приложения. На следующем рисунке приведен пример.

Perforator с выбранным приложением и параметрами отрисовки

Главное окно Perforator с выбранными параметрами

Aa969767.collapse_all(ru-ru,VS.110).gifДиаграммы Perforator

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

В следующей таблице описаны показатели на каждой из диаграмм.

Хронологический график

Описание

Примечания

Частота кадров

Указывает скорость отображения элементов приложением на экране.

Для приложений без анимации это значение должно быть близко к 0. Во время анимации в приложении с высокой производительностью частота кадров должна быть близка к частоте обновления монитора (обычно 60 или 75).

Частота добавления "грязных" прямоугольников

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

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

Целевые программные промежуточные буферы визуализации на кадр

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

IRT — это затратные программные поверхности, выделяемые WPF, в которые и из которых копируются данные. Программные IRT более затратные, чем аппаратные.

IRT обычно вызываются с помощью DrawingBrush, VisualBrush, свойства Opacity в Visual или мозаичных режимов в TileBrush. Если это значение велико (например, больше 5), среда выполнения WPF тратит много ресурсов для визуализации приложения.

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

Целевые аппаратные промежуточные буферы визуализации на кадр

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

IRT — это затратные аппаратные поверхности, выделяемые WPF, в которые и из которых копируются данные.

IRT обычно вызываются с помощью DrawingBrush, VisualBrush, свойства Opacity в Visual или мозаичных режимов в TileBrush. Если это значение велико (например, больше 5), среда выполнения WPF тратит много ресурсов для визуализации приложения. В этом случае необходимо проанализировать все области кода, в которых используются вышеупомянутые элементы.

Аппаратные IRT менее затратные, чем программные.

Использование видеопамяти

Отслеживает большие объемы видеопамяти, используемые WPF для текстур и целевых буферов визуализации. Эта метрика не отслеживает выделение памяти для видеодрайвера или для компиляции и загрузки пиксельных шейдеров и шейдеров текстур.

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

Aa969767.collapse_all(ru-ru,VS.110).gifПараметры отрисовки Perforator и оптимизация отрисовки

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

На следующем рисунке показаны параметры отрисовки Perforator.

Параметры отрисовки Perforator

Параметры визуализации объекта Perforator

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

Aa969767.collapse_all(ru-ru,VS.110).gifПредотвращение программной отрисовки

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

В следующей таблице перечислены параметры Perforator, которые могут помочь обнаружить проблемы с программной отрисовкой.

Параметр

Описание

Примечания

Показывать программную отрисовку с фиолетовым оттенком

Всех области, визуализируемые с помощью программного конвейера визуализации, отображаются с фиолетовым оттенком. К ним относятся целевые буферы программной визуализации, программный 3D-контент и исправление программных ошибок для примитивов.

Аппаратный конвейер отрисовки WPF работает значительно быстрее конвейера программной отрисовки. Слишком большой объем программной отрисовки обычно указывает на проблему. Примером может служить слишком интенсивное мозаичное заполнение Brush или превышение размера текстуры видеокарты.

Показывать программные эффекты для точечных рисунков с красным оттенком

Показывать старые программные эффекты для точечных рисунков с красным оттенком

Программно визуализируемые классы BitmapEffect работают медленно, поэтому их следует избегать. Необходимо использовать аппаратно визуализируемые классы Effect, которые впервые появились в .NET Framework 3.5 SP1.

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

PhotoDemo с фиолетовым оттенком

Photodemo app, демонстрирующий параметры отображения Perforator

Aa969767.collapse_all(ru-ru,VS.110).gifМониторинг "грязных" областей

Так как WPF обновляет только отдельные области окна по мере необходимости, может быть полезно визуализировать обновления. В некоторых случаях даже без анимации в приложении области будет продолжать обновляться. Следующие параметры помогают визуализировать поведение обновления. Ненужные обновления особенно важны для удаленного рабочего стола, виртуальных машин и аналогичных сценариев, когда WPF необходимо отправлять новые растровые изображения по сети. Кроме того, ненужные обновления могут повлиять на срок работы аккумулятора ноутбука.

Параметр

Описание

Примечания

Показывать наложение обновления "грязной" области

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

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

Отключить поддержку "грязных" областей

В результате WPF перерисовывает все окно при каждом изменении.

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

Очистить задний буфер до отрисовки

Очистка окон приложения перед каждой операцией рисования.

Этот параметр — альтернатива параметру Показывать наложение обновления "грязной" области. Он позволяет увидеть последнюю "грязную" область, тогда как наложение обновления "грязных" областей более полезно для просмотра изменений в "грязной" области со временем.

Aa969767.collapse_all(ru-ru,VS.110).gifОбнаружение других причин снижения производительности

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

Параметр

Описание

Примечания

Отключить эффекты непрозрачности

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

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

Отключить исправление программных ошибок примитивов

Отключение исправления программных ошибок для отдельных примитивов отрисовки. Промежуточные программные целевые буферы отрисовки и другие виды программной отрисовки не могут быть отключены.

В большинстве случаев это необязательно. Оставьте флажок снятым.

Отключить масштабирование изображений высокого качества

Отключение пропорционального уменьшения размера больших изображений.

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

Отключить отрисовку трехмерных моделей

Отключение всех операций трехмерной визуализации

Позволяет увидеть влияние операций трехмерной отрисовки в приложении.

Visual Profiler

Visual Profiler — это средство профилирования производительности служб WPF для анализа макета, визуализации и анимации для элементов в визуальном дереве. Анализируя выходные данные профилирования этого средства, можно определить, какие визуальные элементы в приложении могут снижать производительность.

Visual Profiler представляет проблемы производительности в контексте базовых стандартных блоков, которые используются для построения визуальных сцен в приложении. К этим блокам относятся как высокоуровневые объекты, такие как элементы управления Button и TextBlock, так и низкоуровневые объекты, такие как элементы Line и Ellipse. Вместо описания проблем производительности с использованием графов вызовов и имен функций профилировщик Profiler описывает их, используя представление визуальных объектов. Это похоже на то, как средство Windows SDK, UI Spy, отображает сведения. Подробнее об этом см. в разделе UISpy.exe (UI Spy).

Aa969767.collapse_all(ru-ru,VS.110).gifИспользование Visual Profiler

Для использования Visual Profiler запустите приложение WPF, которое требуется проанализировать. Затем щелкните вкладку Visual Profiler, выберите меню Действия и щелкните Выбрать процесс. В диалоговом окне "Выбор процесса" выберите процесс приложения, который требуется проанализировать, а затем нажмите кнопку выбрать. Имя и идентификатор процесса появятся в верхней части вкладки Visual Profiler.

Чтобы проанализировать серьезность проблем производительности WPF, необходимо понимать роль и область действия базовых служб WPF. Эти службы отвечают за макет, визуализацию и анимацию. Visual Profiler графически представляет распределение служб WPF между объектами приложения. Например, когда Visual Profiler отображает визуальное дерево объектов приложения, он накладывает различные оттенки красного на объекты, чтобы представить относительный объем ресурсов, используемых объектами. Объект, который отображается с более темным красным наложением, использует больше ресурсов, чем объект с более светлым наложением. Что еще важнее, Visual Profiler предоставляет декомпозицию объема ресурсов WPF, потребляемых объектом.

На рисунке ниже показан пользовательский интерфейс Visual Profiler.

Пользовательский интерфейс средства Visual Profiler

Пользовательский интерфейс средства Visual Profiler

Пользовательский интерфейс Visual Profiler состоит из восьми областей.

  1. Поле поиска в дереве элемента

  2. Дерево визуальных элементов

  3. Сведения об элементе и область предварительного просмотра

  4. Сведения о монопольном использовании ЦП элементом

  5. Сведения об использовании ЦП приложением

  6. Элемент области ввода полученных данных

  7. Параметры отображения хронологического графика

  8. Параметры предварительного просмотра приложения и наложения производительности

В следующих разделах описана каждая область.

Aa969767.collapse_all(ru-ru,VS.110).gifПоле поиска в дереве элемента

Поле поиска в разделе Дерево элементов можно искать элементы в дереве элементов приложения. При выполнении поиска все соответствующие элементы будут выделены желтым цветом. Элементы можно искать по типу или имени.

Aa969767.collapse_all(ru-ru,VS.110).gifДерево визуальных элементов

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

Далее приводится пример метки элемента в дереве.

Border 'border1' (26) 0.02% (I)/ 0.00 % (E) - .24 ms (I) / 0.00 ms (E)

Часть надписи элемента

Описание

Border

Тип элемента.

'border1'

Имя элемента.

(26)

Размер поддерева.

0.02% (I)

Процент от общего размера инклюзивного дерева, т. е. элемента и всех его потомков.

0.00 (E)

Процент от общих элементов только для элемента.

.24 ms (I)

Время (в миллисекундах) для размещения элемента и его потомков.

0.00 ms (E)

Время (в миллисекундах) для размещения только элемента.

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

Щелкните правой кнопкой мыши элемент, чтобы развернуть или свернуть поддерево. Также можно развернуть критический путь элемента. Критический путь показывает элемент в поддерева, который потребляет больше всего времени ЦП в этом поддереве.

Aa969767.collapse_all(ru-ru,VS.110).gifСведения об элементе и область предварительного просмотра

В разделе Сведения об элементе отображаются тип и имя выбранного элемента (если у элемента есть имя). В разделе Предварительный просмотр также можно увидеть, как элемент выглядит. Если выбран самый верхний элемент, в области предварительного просмотра отображается приложение.

Aa969767.collapse_all(ru-ru,VS.110).gifСведения о монопольном использовании ЦП элементом

В разделе Монопольное использование ЦП элементом отображаются хронологический график и сведения о монопольном использовании ЦП выбранным элементом с течением времени. Например, элемент может затрачивать x % времени ЦП на компоновку макета, y % на измерение макета и z % на отрисовку.

Aa969767.collapse_all(ru-ru,VS.110).gifСведения об использовании ЦП приложением

В разделе Использование ЦП приложением отображаются хронологический график и сведения о событиях приложения. Visual Profiler отслеживает и записывает различные события приложения. События приложения отображаются с абсолютными значениями, на графике показывается время ЦП, затраченное в каждом событии приложения различными цветами. Это позволяет легко увидеть время, которое приложение тратит на макет по сравнению с отрисовкой.

В следующей таблице перечислены события приложения, представленные на графике.

Примечание

События, соответствующие вызовам методов в WPF, представлены именем метода, за которым следует имя класса в скобках.Например, Tick (TimeManager) представляет метод TimeManager.Tick.

События приложения

Описание

Неотмеченное время

Время, затраченное в WPF, не классифицированное в другом событии приложения; все время, затраченное приложением вне WPF

RenderMessageHandler (MediaContext)

Происходит при инициировании прохода отрисовки. Это событие вызывает тиканье диспетчера времени.

Поток отрисовки

Происходит при выполнении инструкций отрисовки в потоке отрисовки. Это полезно для обнаружения приложений, зависящих от отрисовки.

Макет

Возникает во время измерения, упорядочивания и прохода отрисовки.

UpdateRealizations

Возникает при обновлении внутренних точечных представлений эффектов текста или точечного рисунка.

Tick (TimeManager)

Происходит при смене кадров анимации. Это событие может инициировать запуск обработчика визуализации анимации.

При анимации объектов в WPF диспетчер времени управляет объектами Clock, созданными для временных шкал. Диспетчер времени — это корень дерева объектов Clock, который управляет потоком времени в этом дереве. Диспетчер времени создается автоматически для каждого приложения WPF и остается невидимым для разработчика приложения. Диспетчер времени "тикает" множество раз в секунду. Фактическое число тактов зависит от доступных системных ресурсов.

AnimatedRenderMessageHandler (MediaContext)

Возникает при обработке и обновлении анимации. Если анимация включена, этот обработчик обновляет анимацию, что вызывает изменение свойств и отрисовку.

Render (MediaContext)

Возникает во время прохода отрисовки. Этот метод вызывает метод OnRender каждого элемента и полезен для понимания общей стоимости OnRender для всех элементов. Это событие соответствует методу MediaContext.Render в файле профилировщика Visual Studio (VSP).

Aa969767.collapse_all(ru-ru,VS.110).gifЭлемент области ввода полученных данных

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

Aa969767.collapse_all(ru-ru,VS.110).gifПараметры отображения хронологического графика

В разделе Параметры диаграммы содержатся переключатели и ползунок для выбора параметров диаграммы. С помощью переключателей укажите, как ведет себя ось ЦП, вертикальная ось, и отображаются ли абсолютные или относительные веса. Используйте ползунок, чтобы задать максимальное отображаемое значение для графика.

Aa969767.collapse_all(ru-ru,VS.110).gifПараметры предварительного просмотра приложения и наложения производительности

В разделе Параметры управления содержатся три выключателя, которые выполняют следующие действия.

  • Щелкните первый выключатель, чтобы приостановить или запустить сбор данных Visual Profiler.

  • Щелкните переключатель Предварительный просмотр для интерактивного просмотра приложения в разделе Предварительный просмотр.

  • Щелкните переключатель Окно наложения, чтобы добавить желтую границу вокруг выбранного визуального элемента. Кроме того, для элементов, которые потребляют больше всего времени ЦП, добавляется красное наложение. Такой же красный цвет используется для элемента в разделе Дерево элементов. Интенсивность оттенка красного соответствует использованию ЦП.

См. также

Основные понятия

UISpy.exe (UI Spy)

Другие ресурсы

Улучшение производительности приложений WPF

Уровни графической отрисовки

Общие сведения об отрисовке графики в WPF

Новые возможности средств профилирования производительности для WPF