Анализ данных о производительности кода Visual C++, Visual C# и Visual Basic в приложениях для Магазина Windows
В этом разделе описываются данные о производительности кода Visual C++, Visual C# и Visual Basic, которые отображаются в представлениях отчетов средства профилирования Microsoft Visual Studio Express 2012 для Windows 8. Сведения о сборе данных о производительности в Visual C++, Visual C# и Visual Basic см. в одном из следующих разделов.
Содержание раздела
В этом разделе содержатся следующие подразделы.
Откройте файл отчета о профилировании
Типы данных о производительности
Только мой код
Типы представлений отчетов о производительности
Представления отчетов о производительности
Представление "Сводка"
Представление "Сведения о функции"
Представление "Дерево вызовов"
Представление "Вызывающий/вызываемый"
Представление "Модули и функции"
Представление "Строки"
Настройка представлений сетки данных
Откройте файл отчета о профилировании
При остановке сеанса профилирования в среде IDE Visual Studio данные о производительности автоматически отображаются в документе.
Чтобы открыть файл отчета о профилировании (.vspx), созданный инструментом командной строки VSPerf или сохраненный после предыдущего сеанса профилирования, выполните следующие действия:
Если нужно, откройте Visual Studio.
В меню Файл выберите пункт Открыть файл.
В диалоговом окне Открыть файл перейдите к папке, содержащей файл отчета о профилировании и выберите файл отчета.
Типы данных о производительности
Профилировщик Visual Studio Express 2012 для Windows 8 использует метод выборки для сбора данных о производительности кода Visual C++, Visual C# и Visual Basic. С интервалом, определяемым тактовой частотой процессора, профилировщик создает снимок активных в настоящее время функций, так называемый стек вызовов. Активная функция в стеке вызовов выполняет свой код или ожидает, пока код выполнят функции, вызванные этой активной функцией. Для каждой функции в стеке вызовов из примера профилировщик назначает значения выборки, например следующие.
Если функция выполняет код в самой себе (а не в дочерней функции), инкрементно увеличиваются значения счетчика включающих и исключающих выборок функции.
Если функция ожидает возвращения дочерней функции, инкрементно увеличивается только значение счетчика включающих выборок функции.
Данные профилирования функции содержат сведения об абсолютном количестве собранных для данной функции выборок и относительное процентное соотношение этих выборок и всех выборок, собранных в ходе сеанса профилирования. Вычисление данных позволяет получить два набора значений времени:
Значения счетчика включающих выборок функции вычисляются на основе общего количества выборок, собранных для функции, которая находится в стеке вызовов, включая выборки, собранные во время выполнения дочерних функций. Когда анализируется стек вызовов, являющийся объектом выборки, значения счетчика включающих выборок всех функций в стеке вызовов увеличиваются инкрементно..
Значения счетчика исключающих выборок вычисляются по общему количеству выборок, собранных для функции во время выполнения ее кода. При определении значения счетчика исключающих выборок не учитываются выборки, собранные во время исполнения дочерних функций. Когда анализируется стек вызовов, являющийся объектом выборки, значения счетчика исключающих выборок увеличиваются инкрементно только для функции, исполняющей код в самой себе.
Типы представлений отчетов о производительности
В представлениях отчетов о профилировании данные отображаются двумя способами.
Представления графа вызовов отображают информацию о функциях в контексте путей выполнения.
Дерево Критический путь в окне "Сводка" показывает путь выполнения, на котором в ходе сеанса профилирования было обнаружено наибольшее количество выборок, обработка которых заняла больше всего времени.
Представление "Дерево вызовов" — это граф вызовов для всех путей выполнения, которые стали объектами выборки в ходе сеанса профилирования.
В представлениях "Сведения о функции" и "Вызывающий/вызываемый" в центре внимания находится выбранная функция. Кроме того, отображаются функции, вызвавшие выбранную функцию, и функции, которые были ей вызваны.
Представления графа вызовов помогают обнаружить алгоритмические проблемы производительности.
В представлениях списков функций отображаются сведения о производительности данных для функций в таблице. Можно сортировать функции, выбрав столбец данных.
Список Функции с максимальной индивидуальной работой на странице "Сводка" отображает функции, для которых в сеансе профилирования было собрано наибольшее количество исключающих выборок.
В представлении "Модули" функции сгруппированы по содержащему их файлу .dll или .exe.
Представление "Функции" — это не что иное, как единый список функций.
В представлении "Строки" отображаются данные о производительности функциональных инструкций, которые выполнялись во время сбора выборки.
Чтобы перейти от одного представления к другому, выделите функцию и выберите новое представление в раскрывающемся списке Текущее представление.
Только мой код
По умолчанию при создании отчетов профилировщик использует функциональность Только мой код. Когда профилировщик анализирует данные о стеке вызовов, он определяет, является ли функция в стеке вызовов элементом пользовательского кода или элементом системного кода (например, метод в библиотеке базовых классов .NET). Если включен параметр Только мой код и функция представляет собой вызов системного кода, в ходе выполняемого профилировщиком анализа все последующие выборки, собранные для стека вызовов, добавляются к значениям счетчика исключающих и включающих выборок первого вызова системы. Следовательно, системные вызовы сводятся к первому системному вызову, что помогает сконцентрироваться на оптимизации собственного кода.
Чтобы изменить поведение параметра "Только мой код" по умолчанию и просмотреть все системные вызовы, выполните следующие действия:
В меню Сервис выберите пункт Параметры.
В диалоговом окне Параметры выберите Средства производительности и щелкните Общие.
В группе Только мой код снимите флажок Включить режим "Только мой код" для отчетов профилировщика (выборки).
Представления отчетов о производительности
Представление "Сводка"
На странице "Сводка" содержатся два представления данных о профилировании, которые помогут найти объекты для оптимизации производительности.
В дереве Критический путь показан стек вызовов с максимальным количеством выборок, собранных в ходе сеанса профилирования. Если понять, почему на выполнение этого алгоритма требуется так много времени, можно найти пути оптимизации системы.
Список Функции с максимальной индивидуальной работой представляет десять функций, выполнение которых потребовало максимального времени в режиме монопольного доступа. Можно быстро добиться существенного повышения производительности, оптимизировав код функции или уменьшив количество вызовов такой функции.
Чтобы открыть представление "Сведения о функции", выберите имя функции в представлении "Сводка".
Представление "Сведения о функции"
Линейчатая диаграмма Распределение затрат показывает связи между выбираемой функцией и вызывающими функциями, выполнившими выбранную, а также между выбранной функцией и вызванными ею функциями.
На панели "Вызывающие функции" отображаются функции, вызывавшие выбранную функцию. Размер модуля вызывающей функции указывает, сколько общего времени выполнения выбранной функции было потрачено на взаимодействие с вызывающей функцией.
Полоса Выбранная функция указывает относительную часть общего времени выполнения, потраченного выбранной функцией на выполнение собственного кода (модуль Тело функции) и количество времени, потраченного на выполнение функций, которые были вызваны выбранной функцией.
На панели Вызываемые функции отображаются функции, вызванные выбранной функцией. Размер модуля вызываемой функции указывает, сколько общего времени выполнения вызванной функции было потрачено на взаимодействие с вызываемой функцией.
Можно выбрать вызывающую или вызываемую функцию, чтобы сделать ее выделенной функцией.
Представление "Дерево вызовов"
Можно воспользоваться представлением "Дерево вызовов", чтобы изучить пути выполнения функции, пересеченные в приложении. Корнем дерева является точка входа в приложение. В каждом узле функции перечислены все вызванные в нем функции и содержатся данные о производительности, связанные с этими вызовами функций. Значения функций в представлении "Дерево вызовов" приведены для экземпляров функций, вызванных родительской функцией в дереве вызовов. Значения в процентах — это отношение значения времени экземпляров функции к общему времени выполнения сеанса профилирования.
Чтобы сосредоточиться на одном узле представления дерева вызовов, выберите этот узел и щелкните Задать корень в контекстном меню. После задании корневого узла из представления удаляются все записи, кроме поддеревьев выбранного узла. Чтобы сбросить корневой узел и вернуть предыдущее значение, выберите Сбросить корень в контекстном меню.
Столбцы представления "Дерево вызовов"
Имя столбца |
Описание |
---|---|
Включающие выборки |
Число выборок, собранных для экземпляров функции, вызванных родительской функцией в дереве вызовов. Число выборок включает выборки, собранные для функций, которые были вызваны этой функцией. |
Исключающие выборки |
Число выборок, собранных для экземпляров функции, вызванных родительской функцией в дереве вызовов. Число выборок не включает выборки, собранные для функций, которые были вызваны этой функцией. |
Включающие выборки % |
Процентное отношение выборок, собранных для экземпляров функции, которые были вызваны родительской функцией, к общему числу выборок, собранных в сеансе профилирования. Это значение включает выборки, собранные для функций, которые были вызваны этой функцией. |
Исключающие выборки % |
Процентное отношение выборок, собранных для экземпляров функции, которые были вызваны родительской функцией, к общему числу выборок, собранных в сеансе профилирования. Это значение не включает выборки, собранные для функций, которые были вызваны этой функцией. |
Имя модуля |
Имя модуля (.dll или .exe), содержащего эту функцию. |
Представление "Вызывающий/вызываемый"
Представление "Вызывающий/вызываемый" — это представление данных из линейчатой диаграммы "Подробности распределения затрат для функции" в виде дерева, включая все данные о времени. Используйте представление "Вызывающий/вызываемый", чтобы проанализировать связь между выбранной функцией и вызвавшими ее функциями, а также функцией, которую вызвала выбранная функция. Представление "Вызывающий/вызываемый" состоит из трех сеток.
Сетка Текущая функция — отображается в средней таблице и показывает данные профилирования выбранной функции. Значения включают выборки из всех вызовов функции. Функции, вызывавшие текущую функцию отображаются в верхней сетке, а Функции, вызывавшиеся текущей функцией — в нижней. Значения для текущей функции — это результаты по всем вызовам функции, являющимся объектом выборки. Значения вызывающей и вызываемой функций включают только выборки, собранные для данной функции в период, когда она вызывала или вызывалась выбранной функцией.
Для перехода по деревьям вызовов функции дважды щелкните вызывающую или вызываемую функцию. В результате выбранная функция станет новой выбранной функцией и отобразит функции, которые вызывали ее и были вызваны ею.
Столбцы представления "Вызывающий/вызываемый"
Имя столбца |
Описание |
---|---|
Включающие выборки |
|
Исключающие выборки |
|
Включающие выборки % |
|
Исключающие выборки % |
|
Представление "Модули и функции"
В представлении "Модули и функции" отображаются подробные сведения о данных профилирования функций, указанных в отчете профилирования. Представление "Модули" организует функции JavaScript в соответствии с содержащим их исходным JS-файлом. Другие функции перечислены в модуле (например, .dll). В представлении "Функция" перечислены все функции без какой-либо иерархической последовательности. Очень часто найти собственный код в представлении "Модули" проще, чем в представлении "Функции", однако последнее представление больше подходит для сравнения функций.
Столбцы представления "Модули и функции"
Имя столбца |
Описание |
---|---|
Включающие выборки |
Количество выборок, собранных во время нахождения функции в стеке вызовов. Число выборок включает выборки, собранные для функций, которые были вызваны этой функцией. |
Исключающие выборки |
Количество выборок, собранных в процессе выполнения функцией собственного кода. Исключающие выборки не включают выборки, собранные во время выполнения функций, вызванных данной функцией. |
Включающие выборки % |
Процентная доля от общего количества выборок, собранных за сеанс профилирования во время нахождения функции в стеке вызовов. Числителем является значение Включающие выборки для данной функции. Знаменатель — это общее количество выборок, собранных в сеансе профилирования. |
Исключающие выборки % |
Процентная доля от общего количества выборок, собранных за сеанс профилирования для данной функции. Это значение не включает выборки, собранные для функций, которые были вызваны этой функцией. |
Представление "Строки"
В представлении "Строки" данных выборки перечисляются данные о производительности при выполнении инструкций во время сбора выборок в сеансе профилирования. В исходном файле инструкция может занимать несколько строк, а одна строка может включать несколько инструкций.
Имя столбца |
Описание |
---|---|
Включающие выборки |
Количество выборок, собранных в сеансе профилирования для данной строки. Число выборок включает выборки, собранные для функций, которые были вызваны этой строкой. |
Исключающие выборки |
Количество выборок, собранных в сеансе профилирования для данной строки. Число выборок не включает выборки, собранные для функций, которые были вызваны этой строкой. |
Включающие выборки % |
Процентная доля от общего количества выборок, собранных за сеанс профилирования для данной строки. Это значение включает выборки, собранные для функций, которые были вызваны этой строкой. |
Исключающие выборки % |
Процентная доля от общего количества выборок, собранных за сеанс профилирования для данной строки. Это значение не включает выборки, собранные для функций, которые были вызваны этой строкой. |
Начальная исходная строка |
Номер начальной строки в исходном файле, с которой начинается сбор выборок. |
Начальный исходный символ |
Смещение начального символа в строке исходного файла, с которого начинается сбор выборок. |
Конечная исходная строка |
Номер строки в исходном файле, которой заканчивается сбор выборок. |
Конечный исходный символ |
Смещение конечного символа в строке исходного файла, которым заканчивается сбор выборок. |
Настройка представлений сетки данных
Можно добавлять или удалять столбцы данных и изменять порядок их отображения. Откройте контекстное меню строки заголовка таблицы и выберите Добавление или удаление столбцов. Установите флажки столбцов, которые необходимо просмотреть, и снимите флажки столбцов, которые нужно скрыть. Для перемещения выбранного столбца используйте кнопки со стрелками.
Дополнительные столбцы данных профилирования
Имя столбца |
Описание |
---|---|
Адрес функции |
Адрес функции в памяти |
Номер строки функции |
Номер строки, на которой эта функция начинается в исходном файле. |
Исходный файл |
Исходный файл, содержащий определение данной функции. |
Имя модуля |
Имя модуля, содержащего функцию. |
Путь к модулю |
Путь к модулю, содержащему функцию. |
Идентификатор процесса |
Идентификатор процесса (PID) сеанса профилирования. |
Имя процесса |
Имя процесса. |