Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
В выпуске Visual Studio 2022 версии 17.5 можно использовать новое средство динамического инструментирования. Это средство показывает точное количество вызовов функций и быстрее, чем предыдущая версия средства инструментирования. Это средство поддерживает инструментацию .NET Core без необходимости использования PDB-файлов. Начиная с Visual Studio 2022 версии 17.6 (предварительная версия 2), средство также поддерживает C/C++.
Это средство похоже на средство использования ЦП, за исключением того, что оно основано на времени настенных часов вместо использования ЦП. Это означает, что блокированное время, такое как время, затраченное на ожидание блокировки, будет отображаться в трассировке инструментирования, в отличие от инструмента мониторинга использования ЦП. Дополнительные сведения об обучении эффективному использованию средства инструментирования см. в обзоре инструментирования и примерах: изоляция проблемы с производительностью.
Настройка приложения
В проекте Visual Studio задайте конфигурацию решения для выпуска и выберите целевой объект развертывания.
Целевой объект развертывания обычно соответствует имени проекта, указывая локальное развертывание.
Выберите ALT+F2 (или Отладка > профилировщик производительности), чтобы открыть профилировщик производительности в Visual Studio.
Установите флажок инструментирования.
Если вы включите параметр Start with collection paused перед запуском профилировщика, данные не будут собираться, пока не выберете кнопку записи в представлении сеанса диагностики.
Заметка
Если инструмент недоступен для выбора, снимите отметку каждого другого инструмента, так как некоторые инструменты должны работать отдельно. Дополнительные сведения о параллельном использовании инструментов см. в статье Использование нескольких профилировщиков одновременно.
Если средство по-прежнему недоступно, убедитесь, что проект соответствует предыдущим требованиям. Убедитесь, что проект находится в режиме выпуска, чтобы получить наиболее точные данные.
Для некоторых типов проектов, таких как CMake, необходимо задать целевой объект запуска для исполняемого файла. Дополнительные сведения см. в разделе "Какие средства поддерживаются для проекта?".
Нажмите кнопку Пуск, чтобы запустить средство.
Выберите элементы в программе для инструментирования.
Начиная с Visual Studio 2022 версии 17.11 профилировщик сохраняет выбранные элементы для следующего запуска профилирования.
Начиная с Visual Studio 2022 версии 17.13 (предварительная версия 1) можно выбрать элементы для инструментирования для C++.
Выберите ОК.
После запуска инструмента пройдите сценарий, который вы хотите профилировать в приложении. Затем выберите Остановить сбор или закройте приложение, чтобы просмотреть данные.
Проанализируйте отчет по инструментированию
Данные профилирования отображаются в Visual Studio.
В представлении данных инструментирования отображается список функций, упорядоченных по времени выполнения, где функция с самым длительным временем выполнения находится вверху под Лучшие функции. В разделе горячий путь показан стек вызовов для функций, которые занимают больше всего времени. Эти списки могут помочь направить вас к функциям, где происходят проблемы узких мест производительности.
Щелкните функцию, которую вы хотите, и вы увидите более подробное представление.
Доступные данные похожи на средство использования ЦП, за исключением того, что он основан на времени настенных часов и счетчиках вызовов вместо использования ЦП.
Анализ сведений
Если в разделе Top Insights отображаются какие-либо аналитические сведения, воспользуйтесь предоставленной ссылкой, чтобы получить дополнительные сведения об обнаруженной проблеме. Дополнительные сведения см. в аналитике ЦП , но помните, что информация для средства инструментирования относится к времени по настенным часам, а не на использовании ЦП.
Получение помощи по искусственному интеллекту
Если у вас есть Copilot, вы можете получить помощь по искусственному интеллекту во время просмотра основных аналитических сведений. Copilot предоставляет информацию и аналитические сведения, связанные с набором конкретных аналитических сведений о производительности. С помощью Copilot вы также можете задавать вопросы о функциях на определенных горячих путях в коде, что может помочь вам создать более эффективный или экономичный код.
Кнопка Ask Copilotснимок экрана кнопки Ask Copilot. Отображается даже в том случае, если не определены конкретные аналитические сведения о производительности. Выберите "Задать Copilot ", чтобы узнать из Copilot и начать задавать вопросы.
Анализ подробных отчетов по инструментальным средствам
Для подробного анализа отчета инструментирования сначала откройте одно из подробных представлений отчетов:
Щелкните "Открыть сведения" на странице сводки отчета или выберите одну из основных функций, чтобы открыть представление "Функции ".
В списке "Текущее представление" можно выбрать одно из подробных представлений отчета.
В следующей таблице представлено описание подробных представлений.
| Просмотреть | Описание |
|---|---|
| вызывающий/вызываемый | Подробное представление времени, затраченного на определенную функцию, функции, которые её вызывают, и функции, которые она вызывает. Данные о производительности агрегируются за период сбора данных. Вы можете выбрать вызывающие функции и вызываемые функции для обхода пути вызова. |
| Дерево вызовов | Иерархическое представление пути вызова функции. Используется для определения путей вызова, которые занимают больше всего времени (горячий путь). |
| Модули | Представление времени, затраченного на отдельные модули, агрегированное за период сбора данных. Используется для выявления модулей, которые могут создавать узкие места в производительности из-за сочетания большого количества вызовов и или проблем с производительностью. |
| Функции | Представление времени, затраченного на отдельные функции, агрегированное за период сбора данных. Используется для выявления функций, которые могут быть узкими местами производительности из-за большого количества вызовов и/или проблем с производительностью. |
| График пламени | Иерархическое представление пути вызова функции в визуализации диаграммы пламени. Используется для определения путей вызова, которые занимают больше всего времени (горячий путь). |
Во всех представлениях, кроме caller/callee, диагностический отчет сортируется по Total [unit, %], от самого высокого до самого низкого. Измените порядок сортировки или столбец сортировки, выбрав заголовки столбцов. Вы можете дважды щелкнуть интересующую вас функцию, и вы увидите источник для функции, а также выделение, показывающее, где время тратится в этой функции. В таблице показаны такие данные, как время, затраченное на функцию, включая вызванные функции (Total), и время, затраченное на функцию, исключая вызванные функции (Self) во втором столбце.
Эти данные помогают оценить, является ли сама функция узким местом производительности. Определите объем данных, отображаемых методом, чтобы узнать, являются ли сторонние библиотеки кода или библиотеки среды выполнения причиной медленного или интенсивного использования ресурсов конечными точками.
Дополнительные сведения об использовании Flame графика см. в статье Определение горячих путей с помощью Flame графика
Дерево вызовов инструментирования
Чтобы просмотреть дерево вызовов, выберите родительский узел в отчете. По умолчанию, страница инструментирования открывается в представлении Caller/Callee. В раскрывающемся списке текущее представление выберите дерево вызовов. Представление дерева вызовов поможет быстро определить узкие места в производительности.
Вы можете нажать кнопки "Развернуть горячий путь" и "Показать горячий путь", чтобы увидеть вызовы функций, занимающих больше всего времени процессора, в представлении дерева вызовов.
Дополнительные сведения о значениях столбцов:
Total указывает, сколько времени было потрачено в функции и любых функциях, вызываемых ею. Высокие значения по общему числу указывают на функции, которые потребляют больше всего процессорного времени.
Self показывает, сколько времени было потрачено в теле функции, за исключением времени, которое было затрачено на вызванные ей функции. Высокие значения self могут указывать на узкое место в производительности самой функции.
число вызовов указывает количество вызовов функции.
модуль имя модуля, содержащего функцию.
Сведения о непредвиденных данных в дереве вызовов см. в разделе "Общие сведения о дереве вызовов".
Асинхронные вызовы в дереве вызовов инструментирования (.NET)
Начиная с Visual Studio 2022 версии 17.13 (предварительная версия 2), представления, отображающие визуальное дерево вызовов, вложенные асинхронные вызовы .NET под функциями, где был выполнен асинхронный вызов, что упрощает трассировку потока выполнения в рамках единой трассировки стека. Это поможет быстро определить узкие места производительности.
Трассировка единого стека отображается в представлении дерева вызовов и разделе горячий путь страницы "Сводка". Асинхронные узлы отображаются с меткой [Асинхронный вызов].
Вы можете переключить отображение стека асинхронных вызовов, выбрав Сшитые Асинхронные Стэки из опции Фильтр в представлении сводки профилировщика. Параметр включен по умолчанию.