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 Profiler

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

Чтобы установить WPF Performance Suite, выполните следующие действия.

  1. Если установлена более ранняя версия Windows Performance Toolkit, удалите ее.

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

    В параметрах установки установите флажок Windows Performance Toolkit в узле Common Utilities. Сведения о загрузке см. на странице загрузки пакета Windows SDK.

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

  4. В группе "Tools" выберите Install Windows Performance Tool Kit.

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

  5. Следуйте инструкциям мастера, чтобы установить Windows Performance Toolkit.

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

    • Performance Analyzer;

    • справка по Windows Performance Toolkit;

    • GPUView;

    • WPF Performance Suite.

Запуск WPF Performance Suite

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

Чтобы запустить WPF Performance Suite, выполните следующие действия.

  1. В меню Пуск выберите Все программы и Microsoft Windows Performance Toolkit.

  2. Выберите WPF Performance Suite.

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

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

При первом запуске WPF Performance Suite появляется диалоговое окно Add Tools. Диалоговое окно "Add Tools" позволяет добавлять средства профилирования производительности. Чтобы добавить средство, необходимо выбрать сборку, содержащую средство, и нажать кнопку Scan Assembly. Открыть диалоговое окно "Add Tools" можно в любое время, выбрав команду Add Tool в меню File. Ниже показано диалоговое окно "Add Tools".

Диалоговое окно "Add Tools"

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

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

Средство

Описание

Perforator

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

Visual Profiler

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

Убедитесь, что флажки Perforator и Visual Profiler установлены, и нажмите кнопку OK.

Perforator

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

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

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

Использование Perforator

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

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

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

Диаграммы в Perforator

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

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

Диаграмма

Описание

Примечания

Frame Rate

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

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

Dirty Rect Addition rate

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

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

SW IRTs Per Frame

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

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

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

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

HW IRTs Per Frame

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

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

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

Аппаратные целевые буферы визуализации являются менее затратными, чем программные.

Video Memory Usage

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

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

Параметры визуализации и оптимизация визуализации в Perforator

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

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

Параметры визуализации в Perforator

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

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

Минимизация программной визуализации

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

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

Параметр

Описание

Примечания

Draw software rendering with purple tint

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

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

Draw software rendered bitmap effects with red tint

Программно визуализируемые растровые эффекты из прежних версий платформы закрашиваются красным цветом.

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

На следующей иллюстрации показан пример приложения PhotoDemo при установленном флажке Draw software rendering with purple tint.

Приложение PhotoDemo с программно визуализируемыми областями, показанными фиолетовым цветом

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

Мониторинг "грязных" областей

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

Параметр

Описание

Примечания

Show dirty-region update overlay

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

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

Disable dirty region support

При каждом изменении WPF перерисовывает все окно.

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

Clear back-buffer before rendering

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

Этот параметр представляет собой альтернативу параметру Show dirty-region update overlay. В этом режиме отображается самая последняя "грязная" область, тогда как режимом заливки при обновлении "грязных" областей удобнее пользоваться для просмотра изменений "грязной" области с течением времени.

Выявление других источников снижения производительности

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

Параметр

Описание

Примечания

Disable Opacity Effects

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

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

Disable per-primitive software fallback

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

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

Disable high-quality image rescaling

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

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

Disable 3D rendering

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

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

Visual Profiler

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

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

Использование Visual Profiler

Для использования средства Visual Profiler запустите приложение WPF, поведение которого требуется проанализировать. После запуска приложения перейдите на вкладку Visual Profiler и в меню Actions выберите команду Select Process. В диалоговом окне "Select Process" выберите процесс приложения, которое требуется проанализировать, и нажмите кнопку Select. Имя процесса и идентификатор процесса должны появиться вверху вкладки 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. Параметры просмотра приложения и выделения/заливки элементов

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

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

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

Визуальное дерево элементов

Элемент управления "дерево" в области Element Tree служит для отображения типов и имен визуальных элементов приложения вместе со сведениями о размере поддерева и макете.

Ниже приведен пример метки элемента в дереве.

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)

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

Управлять тем, как должны отображаться время и проценты — включая потомков или исключая потомков — можно с помощью меню View.

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

Сведения об элементе и его изображение

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

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

В разделе Element Exclusive CPU Usage отображается диаграмма потребления времени ЦП выбранным элементом, а также соответствующие сведения. Например, элемент может затрачивать x% времени ЦП на компоновку макета, y% на измерение макета и z% на визуализацию.

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

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

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

ПримечаниеПримечание

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

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

Описание

Unlabeled Time

Затраченное в WPF время, не подпадающее под какое-либо другое событие приложения; все время, затраченное приложением за пределами WPF.

RenderMessageHandler (MediaContext)

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

Rendering Thread

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

Макет

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

UpdateRealizations

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

Tick (TimeManager)

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

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

AnimatedRenderMessageHandler (MediaContext)

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

Render (MediaContext)

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

Управление масштабом диаграммы

В разделе Graph Options предусмотрен элемент управления масштабом собранных данных. Перетаскивая ручки окна масштабирования, можно изменить размер временной оси диаграмм Element Exclusive CPU Usage и Application CPU Usage.

Параметры отображения диаграммы

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

Параметры просмотра приложения и выделения/заливки элементов

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

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

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

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

См. также

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

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

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

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

UISpy.exe (UI Spy)

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

What's New for Performance Profiling Tools for WPF