Прочитать на английском

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


Сначала рассмотрим средства профилирования (C#, Visual Basic, C++, F#)

Выбор языка программирования или среды выполнения

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

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

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

Измеряйте производительность в релизных сборках

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

Откройте Профилировщик производительности, выбрав Отладка>Профилировщик производительности (или Alt + F2).

Скриншот профайлера производительности.

Снимок экрана Профилировщика Производительности.

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

В профилировщике производительности доступны следующие средства:

Сведения о поддержке средств профилирования для различных типов приложений см. в статье Какой инструмент следует использовать?.

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

Измерение производительности при отладке

Средства профилирования, к которым можно получить доступ во время сеанса отладки, доступны в окне средств диагностики. Окно средств диагностики отображается автоматически, если вы не отключили его. Чтобы открыть окно, щелкните Отладка или Windows/ Показать средства диагностики (или нажмите клавиш и CTRL + ALT + F2). Открыв окно, можно выбрать средства, для которых требуется собрать данные.

Окне Средств Диагностики

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

окно средств диагностики

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

Сводка средств диагностики Сводка средств диагностики

Сводка средств диагностики

Окно диагностических средств — это распространенный способ профилирования приложений, но для сборок Release можно также выполнять посмертный анализ приложения. Дополнительные сведения о различных подходах можно найти в разделе Запуск средств профилирования при выпуске или отладке сборок. Сведения о поддержке средств профилирования для различных типов приложений см. в статье Какой инструмент следует использовать?.

Средства, доступные в окне средств диагностики или во время сеанса отладки, включают:

Совет

Используйте повторное запуск, чтобы пропустить страницу запуска и автоматически запустить с предыдущими параметрами, нажав клавиши ALT+F2 или щелкнувОтладка > профилировщик производительности.

Примечание

Для запуска средств профилирования с помощью отладчика требуется Windows 8 и более поздние версии (окно средств диагностики).

Анализ использования ЦП

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

При использовании средства использования ЦП, интегрированного с отладчиком, откройте окно средства диагностики (если оно закрыто, выберите Отладка или Windows / Показать средства диагностики). Во время отладки откройте представление сводки, и выберите Запись профиля ЦП.

Включить использование ЦП в средствах диагностики

Включить использование ЦП в средствах диагностики использования ЦП

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

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

Представление использования ЦП

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

Средство диагностики: Использование ЦП - вид

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

Совет

Профилировщик Visual Studio поддерживает сбор и просмотр трассировок. Профилировщик также может просматривать трассировки, собранные ранее другими средствами, например dotnet-trace. Dotnet-trace создает результаты выборки, а не инструментированную трассировку. Дополнительные сведения см. в dotnet-trace.

просмотр вызываемого абонентом средства диагностики

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

просмотр вызываемого абонентом средства диагностики

Анализ использования памяти

Окно средств диагностики также позволяет оценить использование памяти в приложении с помощью инструмента использования памяти. Например, можно просмотреть количество и размер объектов в куче. Вы можете использовать инструмент Memory Usage, интегрированный в отладчик, или пост-мортем инструмент Memory Usage в профилировщике производительности.

Разработчики .NET могут выбирать между средством выделения объектов .NET или средством использования памяти.

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

Чтобы проанализировать использование памяти с помощью инструмента для анализа использования памяти, необходимо выполнить по крайней мере один снимок памяти. Часто лучший способ анализа памяти — сделать два моментальных снимка: первый — непосредственно перед возникновением подозрительной проблемы с памятью, а второй — сразу после предполагаемой проблемы с памятью. Затем можно просмотреть дифф двух моментальных снимков и увидеть, что изменилось. На следующем рисунке показано создание моментального снимка с помощью средства, интегрированного с отладчиком.

Сделать снимок экрана в средствах диагностики

создание моментального снимка в средствах диагностики

При выборе одной из ссылок со стрелками вам дается дифференциальное представление кучи (красная стрелка увеличение использования памяти показывает увеличение количества объектов (слева) или увеличение размера кучи (справа)). Если щелкнуть по правильной ссылке, вы получите разностное представление кучи, упорядоченное объектами, которые больше всего увеличились в размере кучи. Это поможет определить проблемы с памятью. Например, на рисунке ниже количество байтов, используемых объектами ClassHandlersStore, увеличилось на 3 492 байта во втором моментальном снимке.

Вид разности куч диагностических инструментов Диагностические инструменты

представление разницы кучи средств диагностики

Если щелкнуть ссылку слева вместо в представлении использование памяти, представление кучи будет организовано по количеству объектов; объекты определенного типа, увеличившиеся больше всего в количестве, отображаются в верхней части (отсортированы по столбцу Count Diff).

Инструментирование

Инструментарий аналогичен инструменту анализа загрузки ЦП, за исключением того, что он предоставляет точные счетчики вызовов и время по настенным часам, а не загрузку ЦП. Метод инструментирования требует больше накладных расходов, чем средство использования ЦП. Это средство доступно в инструменте "Профилировщик производительности". Откройте профилировщик производительности, выбрав Отладка>Профилировщик производительности (или Alt + F2). Дополнительные сведения см. в инструментирование.

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

Проверка операций ввода-вывода файлов

Инструмент ввода-вывода файлов , помогает вам понять, как оптимизировать операции ввода-вывода файлов для повышения производительности ваших приложений. Если вы пытаетесь исследовать и диагностировать медленную загрузку, новое средство ввода-вывода файлов поможет вам понять, как операции ввода-вывода влияют на ваше потраченное время. Это средство доступно в профилировщике производительности. Выберите "Отладка >", чтобы открыть профилировщик производительности (или Alt + F2).

В этом средстве показаны операции чтения и записи файлов в представлении списка с вкладками.

снимок экрана: средство ввода-вывода файлов остановлено.

Изучение производительности с помощью perfTips

Часто самый простой способ просмотра сведений о производительности — использовать PerfTips. С помощью perfTips можно просматривать сведения о производительности при взаимодействии с кодом. Можно проверить такие сведения, как длительность события (измеряемая по истечении последней приостановки отладчика или при запуске приложения). Например, если вы выполняете пошаговое выполнение кода (F10, F11), PerfTips показывает время выполнения приложения в промежутке с предыдущего шага до текущего.

Снимок экрана с PerfTips.

снимок экрана с PerfTips.

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

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

снимок экрана: представление событий средств диагностики.

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

Примечание

Если у вас есть Visual Studio Enterprise, на этой вкладке можно также просмотреть события IntelliTrace.

Анализ асинхронного кода (.NET)

Средство .NET Async позволяет анализировать производительность асинхронного кода в приложении. Это средство доступно в профилировщике производительности. Откройте Профилировщик производительности, выбрав Отладка>Профилировщик производительности (или Alt + F2).

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

асинхронное средство .NET остановлено

Это средство поддерживается для приложений .NET Core и .NET 5+.

Анализ асинхронного кода (.NET)

Средство .NET Async позволяет анализировать производительность асинхронного кода в вашем приложении. Это средство доступно в профилировщике производительности. Откройте профилировщик производительности, выбрав Отладка>Профилировщик производительности (или Alt + F2).

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

.NET Асинхронный инструмент остановлен

Это средство поддерживается для приложений .NET Core и .NET 5+.

Анализ производительности базы данных (.NET)

Для приложений .NET Core и .NET 5+, использующих ADO.NET или Entity Framework Core, средство базы данных позволяет записывать запросы к базе данных, которые приложение выполняет во время диагностического сеанса. Затем можно проанализировать сведения об отдельных запросах, чтобы найти места, где можно улучшить производительность приложения. Этот инструмент доступен в профилировщике производительности. Откройте Профилировщик производительности, выбрав Отладка>Профилировщик производительности (или Alt + F2).

Средство отображает каждый запрос в представлении списка. Вы можете просмотреть такие сведения, как время начала запроса и длительность.

распределение

Визуализация счетчиков .NET (.NET)

Начиная с версии 16.7 Visual Studio 2019, вы можете использовать средство .NET Counters в Visual Studio для визуализации счетчиков производительности. Вы можете визуализировать счетчики, созданные с помощью счетчиков dotnet. Пакет dotnet counters поддерживает множество показателей, таких как загрузка процессора и размер кучи сборщика мусора.

В средстве отображаются динамические значения для каждого счетчика в представлении списка.

инструмент сбора данных счетчика .NET.

Это средство поддерживается для приложений .NET Core и .NET 5+.

Проверка событий приложения

Универсальный просмотрщик событий позволяет просматривать активность вашего приложения через список событий, таких как загрузка модуля, запуск потока и системные конфигурации, чтобы лучше диагностировать, как работает ваше приложение прямо в профилировщике Visual Studio. Это средство доступно в профилировщике производительности. Откройте профилировщик производительности, выбрав Отладка>Профилировщик производительности (или Alt + F2).

Инструмент показывает каждое событие в виде списка. Столбцы предоставляют сведения о каждом событии, например имени события, метке времени и идентификаторе процесса.

трассировки

Просмотр пользовательских событий в графиках временной шкалы

Вы можете программировать пользовательские события, которые отображаются в виде значков на графиках временной шкалы, таких как графики использования ЦП и временной шкалы использования памяти. Для получения дополнительной информации см. в разделе () «Добавление меток пользователей на временную шкалу» ().

Анализ потребления ресурсов (XAML)

В приложениях XAML, таких как классические приложения WPF для Windows и приложения UWP, можно анализировать потребление ресурсов с помощью средства "Временная шкала приложений". Например, можно проанализировать время, затраченное приложением на подготовку кадров пользовательского интерфейса (макет и отрисовку), обслуживание сетевых и дисковых запросов, а также в таких сценариях, как запуск приложения, загрузка страницы и изменение размера окна. Чтобы использовать средство, выберите временную шкалу приложений в профилировщике производительности, а затем выберите запустить. В приложении перейдите к сценарию с подозрительной проблемой потребления ресурсов, а затем выберите Остановить сбор, чтобы создать отчет.

Низкая скорость кадров в графе визуальной пропускной способности может соответствовать визуальным проблемам, которые возникают при запуске приложения. Аналогичным образом, большое число в использовании потока пользовательского интерфейса граф может также соответствовать проблемам с реагированием пользовательского интерфейса. В отчете можно выбрать период времени с предполагаемой проблемой производительности, а затем проверить подробные действия потока пользовательского интерфейса в представлении сведений о временной шкале (нижняя область).

средство профилирования временных шкал приложений

инструмент профилирования временной шкалы приложения

В представлении сведений о временной шкале можно найти такие сведения, как тип действия (или элемент пользовательского интерфейса), а также длительность действия. Например, на рисунке событие макета для элемента управления Grid занимает 57,53 мс.

Дополнительные сведения см. в графике подачи заявок.

Изучение событий производительности пользовательского интерфейса и специальных возможностей (UWP)

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

просмотр событий анализа пользовательского интерфейса в средствах диагностики

Просмотр событий анализа пользовательского интерфейса в диагностических средствах

Анализ использования GPU (Direct3D)

В приложениях Direct3D (компоненты Direct3D должны находиться в C++), вы можете изучить действия на GPU и проанализировать проблемы с производительностью. Для получения дополнительной информации см. Использование GPU. Чтобы использовать средство, выберите использование GPU в профилировщике производительности, а затем выберите запустить. В вашем приложении перейдите к сценарию, который вы хотите профилировать, а затем выберите Остановить сбор, чтобы создать отчет.

При выборе периода времени в графах и выборе сведений о представлении подробное представление отображается в нижней области. В подробном представлении можно проверить, сколько действий происходит на каждом ЦП и GPU. Выберите события на нижней панели, чтобы получить всплывающие окна на временной шкале. Например, выберите событие Present, чтобы просматривать всплывающие окна вызовов Present. (Светло-серые вертикальные линии VSync можно использовать в качестве ориентира, чтобы понять, были ли пропущены определенные вызовы Present на VSync. Между каждым двумя VSync вызовами должен быть один вызов Present, чтобы приложение стабильно поддерживало 60 FPS.)

средство профилирования использования GPU

средство профилирования использования GPU

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

Анализ производительности (устаревшие средства)

В Visual Studio 2019 устаревший обозреватель производительности и связанные средства профилирования, такие как мастер производительности, были объединены в профилировщик производительности, который можно открыть с помощью отладка>профилировщик производительности. В профилировщике производительности доступные средства диагностики зависят от выбранного целевого объекта и текущего открытого запускаемого проекта. Средство использования ЦП предоставляет возможность выборки, ранее поддерживаемую в мастере производительности. Инструментирование предоставляет функции инструментированного профилирования (для точного подсчёта вызовов и измерения их длительности), которые ранее были частью мастера производительности. Дополнительные средства памяти также отображаются в профилировщике производительности.

средство обозревателя производительности