Инструментирование приложения .NET в Visual Studio (C#, C++, Visual Basic, F#)
В выпуске Visual Studio 2022 версии 17.5 можно использовать новое средство динамического инструментирования. Это средство показывает точное количество вызовов функций и быстрее, чем предыдущая версия средства инструментирования. Это средство поддерживает инструментацию .NET Core без необходимости использования PDB-файлов. Начиная с Visual Studio 2022 версии 17.6 (предварительная версия 2), средство также поддерживает C/C++.
Это средство похоже на средство использования ЦП, за исключением того, что оно основано на времени настенных часов вместо использования ЦП. Это означает, что блокированное время, такое как время, затраченное на ожидание блокировки, будет отображаться в трассировке инструментирования, в отличие от инструмента мониторинга использования ЦП. Дополнительные сведения об обучении эффективному использованию средства инструментирования см. в обзоре инструментирования и примерах: изоляция проблемы с производительностью.
Настройка приложения
Выберите ALT+F2 (или Отладка > профилировщик производительности), чтобы открыть профилировщик производительности в Visual Studio.
Установите флажок инструментирования.
Если вы включите параметр Start with collection paused перед запуском профилировщика, данные не будут собираться, пока не выберете кнопку записи в представлении сеанса диагностики.
Заметка
Если инструмент недоступен для выбора, снимите отметку каждого другого инструмента, так как некоторые инструменты должны работать отдельно. Дополнительные сведения о параллельном использовании инструментов см. в статье Использование нескольких профилировщиков одновременно.
Если средство по-прежнему недоступно, убедитесь, что проект соответствует предыдущим требованиям. Убедитесь, что проект находится в режиме выпуска, чтобы получить наиболее точные данные.
Нажмите кнопку Пуск, чтобы запустить средство.
Выберите элементы в программе для инструментирования.
Начиная с Visual Studio 2022 версии 17.11 профилировщик сохраняет выбранные элементы для следующего запуска профилирования.
Начиная с Visual Studio 2022 версии 17.13 (предварительная версия 1) можно выбрать элементы для инструментирования для C++.
Выберите ОК.
После запуска инструмента пройдите сценарий, который вы хотите профилировать в приложении. Затем выберите Остановить сбор или закройте приложение, чтобы просмотреть данные.
Проанализируйте отчет по инструментированию
Данные профилирования отображаются в Visual Studio.
В представлении данных инструментирования отображается список функций, упорядоченных по времени выполнения, где функция с самым длительным временем выполнения находится вверху под Лучшие функции. В разделе горячий путь показан стек вызовов для функций, которые занимают больше всего времени. Эти списки могут помочь направить вас к функциям, где происходят проблемы узких мест производительности.
Щелкните функцию, которую вы хотите, и вы увидите более подробное представление.
Доступные данные похожи на средство использования ЦП, за исключением того, что он основан на времени настенных часов и счетчиках вызовов вместо использования ЦП.
Анализ сведений
Если в разделе Top Insights отображаются какие-либо аналитические сведения, воспользуйтесь предоставленной ссылкой, чтобы получить дополнительные сведения об обнаруженной проблеме. Дополнительные сведения см. в аналитике ЦП , но помните, что информация для средства инструментирования относится к времени по настенным часам, а не на использовании ЦП.
Кроме того, если вы используете 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 под функциями, где был выполнен асинхронный вызов, что упрощает трассировку потока выполнения в рамках единой трассировки стека. Это поможет быстро определить узкие места производительности.
Трассировка единого стека отображается в представлении дерева вызовов и разделе горячий путь страницы "Сводка". Асинхронные узлы отображаются с меткой [Асинхронный вызов].
Вы можете переключить отображение стека асинхронных вызовов, выбрав Сшитые Асинхронные Стэки из опции Фильтр в представлении сводки профилировщика. Параметр включен по умолчанию.