Поделиться через


Инструментирование приложения .NET в Visual Studio (C#, C++, Visual Basic, F#)

В выпуске Visual Studio 2022 версии 17.5 можно использовать новое средство динамического инструментирования. Это средство показывает точное количество вызовов функций и быстрее, чем предыдущая версия средства инструментирования. Это средство поддерживает инструментирование .NET Core без необходимости использования PDF-файлов. Начиная с Visual Studio 2022 версии 17.6 (предварительная версия 2), средство также поддерживает C/C++.

Это средство похоже на средство использования ЦП, за исключением того, что оно основано на времени настенных часов вместо использования ЦП. Это означает, что время, затраченное на ожидание блокировки, будет отображаться в трассировке инструментирования, в отличие от средства использования ЦП. Дополнительные сведения об обучении эффективному использованию инструмента инструментирования см. в статье "Обзор инструментирования" и "Улучшение производительности Visual Studio" с помощью нового инструмента инструментирования.

Инструментирование приложения

  1. Выберите ALT+F2 (или Профилировщик производительности отладки > ), чтобы открыть профилировщик производительности в Visual Studio.

  2. Установите флажок инструментирования.

    Снимок экрана: выбранное средство инструментирования.

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

    Примечание.

    Если инструмент недоступен для выбора, снимите флажки для всех остальных инструментов, так как некоторые из них должны работать в одиночку. Дополнительные сведения о выполнении инструментов см. в статье "Использование нескольких средств профилировщика одновременно".

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

  3. Нажмите кнопку Пуск, чтобы запустить средство.

  4. Выберите элементы в программе для инструментирования.

    Снимок экрана: выбор элементов для инструментирования диалогового окна.

    Начиная с Visual Studio 2022 версии 17.11 Preview 1, профилировщик сохраняет выбранные элементы для следующего запуска профилирования.

  5. Нажмите ОК.

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

Анализ отчета инструментирования

Данные профилирования отображаются в Visual Studio.

Снимок экрана: данные инструментирования .NET.

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

Щелкните функцию, которую вы хотите, и вы увидите более подробное представление.

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

Изучение аналитических сведений

Если какие-либо аналитические сведения отображаются в разделе Top Insights , воспользуйтесь предоставленной ссылкой, чтобы получить дополнительные сведения об обнаруженной проблеме. Дополнительные сведения см. в аналитических сведениях о ЦП, но помните, что сведения для средства инструментирования зависят от времени настенных часов, а не использования ЦП.

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

Анализ подробных отчетов инструментирования

Чтобы проанализировать отчет инструментирования, нажмите кнопку "Открыть сведения" или щелкните одну из основных функций, чтобы открыть представление "Функции ".

В отчете представлены различные представления диагностических данных:

  • Вызывающий или вызывающий
  • Дерево вызовов
  • Модули
  • Функции
  • Flame Graph

Во всех представлениях, кроме caller/callee, диагностический отчет отсортирован по сумме [единица, %], от максимального до самого низкого. Измените порядок сортировки или столбец сортировки, выбирая заголовки столбцов. Вы можете дважды щелкнуть интересующую вас функцию, и вы увидите источник для функции, а также выделение, показывающее, где время тратится в этой функции. В таблице показаны столбцы с такими данными, как время, затраченное на функцию, включая называемые функции (Total), а второй столбец, показывающий время, затраченное на функцию, за исключением именованных функций (Self).

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

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

Дерево вызовов инструментирования

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

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

Снимок экрана: структура дерева вызовов.

Ниже приведены дополнительные сведения по значениям столбца.

  • Общее значение указывает, сколько времени было потрачено на функцию и все функции, вызываемые ею. Высокие итоговые значения указывают на функции, которые потребляют больше всего времени.

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

  • Число вызовов указывает количество вызовов функции.

  • Имя модуля, содержащего функцию.