Знакомство со средствами профилирования (C#, Visual Basic, C++, F#)
Средства измерения производительности приложений важны для разработчиков, которые хотят оптимизировать код и повысить производительность приложения. Visual Studio предлагает ряд средств профилирования и диагностика, которые помогают диагностировать использование памяти и ЦП и другие проблемы на уровне приложений. С помощью этих средств можно накапливать данные о производительности во время выполнения приложения. Профилировщик может быстро принимать обоснованные решения, предоставляя визуальное представление о времени выполнения и использовании ЦП для приложения. В этой статье мы кратко рассмотрим наиболее распространенные средства профилирования.
Сведения о выборе правильного средства или поддержке средств профилирования для различных типов приложений см. в статье "Какой инструмент следует использовать?" Руководство по оптимизации кода с помощью средств профилирования см . в руководстве по оптимизации кода.
Измерение производительности в сборках выпуска
Средства в Профилировщике производительности предназначены для анализа сборок выпуска. В профилировщике производительности можно собрать диагностические сведения во время работы приложения, а затем проанализировать их после его остановки (последующий анализ).
Откройте Профилировщик производительности, последовательно выбрав Отладка>Профилировщик производительности (или нажмите клавиши ALT + F2).
Дополнительные сведения об использовании средства "Загрузка ЦП" или "Использование памяти" в Профилировщике производительности и средств, встроенных в отладчик, см. в статье Запуск средств профилирования с отладчиком или без него.
Средства, доступные в Профилировщике производительности:
- Использование ЦП
- Распределение объектов .NET
- Использование памяти.
- Инструментирование
- Средство .NET Async.
- Операции ввода-вывода файлов
- Счетчики .NET
- Средства базы данных.
- Использование GPU
См. дополнительные сведения о рекомендуемом средстве профилирования с поддержкой разных типов приложений.
В некоторых сценариях в окне можно выбрать несколько средств профилирования. Средства, такие как "Загрузка ЦП", могут предоставлять дополнительные данные, полезные для проведения анализа. Вы также можете использовать профилировщик командной строки, чтобы поддержать сценарии, включающие несколько средств профилирования.
Измерение производительности во время отладки
Средства профилирования, которыми можно воспользоваться во время сеанса отладки, доступны в окне "Средства диагностики". Окно Средства диагностики появится автоматически, если вы не отключали эту функцию. Чтобы открыть окно, щелкните Отладка | Окна | Показать средства диагностики или нажмите сочетание клавиш CTRL + ALT + F2. В открытом окне можно выбирать средства, для которых требуется собрать данные.
При отладке можно использовать окно средств диагностики для анализа ЦП, использования памяти, счетчиков .NET и просмотра событий, которые отображают сведения о производительности.
При отладке можно использовать окно Средства диагностики для анализа использования ЦП и памяти, а также просматривать события, отображающие сведения, связанные с производительностью.
Использование окна Средства диагностики является распространенным способом профилирования приложений, но для сборок выпуска вместо этого также можно выполнять последующий анализ приложения. Дополнительные сведения о различных подходах см. в статье Выполнение средств профилирования с отладчиком и без него. См. дополнительные сведения о рекомендуемом средстве профилирования с поддержкой разных типов приложений.
Средства, доступные в окне "Средства диагностики" или во время сеанса отладки:
Совет
Используйте повторное запуск, чтобы пропустить страницу запуска и автоматически запустить с предыдущими параметрами, нажав клавиши ALT+F2 или нажав кнопку "Профилировщик производительности отладки>".
Примечание.
Для запуска средств профилирования с отладчиком (окно Средства диагностики) требуется Windows 8 и более поздние версии.
Анализ использования ЦП
Средство загрузки ЦП является хорошей отправной точкой для анализа производительности приложения. С его помощью вы получите дополнительные сведения о ресурсах ЦП, используемых приложением. Вы можете использовать средство "Загрузка ЦП", встроенное в отладчик, или средство "Использование ЦП"последующего анализа.
При использовании средства "Загрузка ЦП", встроенного в отладчик, откройте окно "Средства диагностики" (если оно закрыто, выберите Отладка > Окна > Показать средства диагностики). Во время отладки откройте представление Сводка и выберите Запись профиля ЦП.
Единственный способ использовать средство — установить в коде две точки останова: одну в начале и одну в конце функции и области кода, которые требуется проанализировать. Проверьте данные профилирования во время приостановки во второй точке останова.
В представлении Загрузка ЦП отображается список функций, упорядоченных по самой продолжительно выполняющейся, которая расположена в верхней части раздела Важнейшие функции. В разделе Критический путь отображается стек вызовов для функций, которые используют максимальную загрузку ЦП. Эти списки помогут переходить к функциям, где наблюдаются проблемы с производительностью.
В представлении Загрузка ЦП отображается список функций, упорядоченных по самой продолжительно выполняющейся (эта функция расположена в верхней части). Это поможет переходить к функциям, где наблюдаются проблемы с производительностью.
Щелкните интересующую вас функцию, и вы увидите более подробное представление дерева вызовов с выделенной функцией. В таблице отображаются столбцы с данными, такими как время, затраченное на выполнение функции, включая вызываемые функции (ЦП (всего)), и второй столбец, показывающий время, затраченное на выполнение функции, за исключением вызываемых функций (Собственная активность ЦП). Эти данные помогут оценить, оказывает ли негативное влияние на производительность сама функция.
Совет
Профилировщик Visual Studio поддерживает сбор и просмотр трассировок. Профилировщик также может просматривать трассировки, собранные ранее другими средствами, например dotnet-trace. Dotnet-trace создает результаты выборки, а не инструментированную трассировку. Дополнительные сведения см. в разделе dotnet-trace.
Щелкните нужную функцию, и вы увидите более подробное представление "бабочка" с выбранной функцией в середине окна, вызывающей функцией слева и вызываемой функцией справа. В разделе Тело функции также показан общий объем времени (и доля времени), затраченного в теле функции за исключением времени, затраченного в вызываемых и вызывающих функциях. Эти данные помогут оценить, оказывает ли негативное влияние на производительность сама функция.
Анализ данных об использовании памяти
В окне средств диагностики также можно оценить использование памяти в приложении с помощью средства Использование памяти. Например, можно узнать число и размер объектов в куче. В Профилировщике производительности можно использовать средство "Использование памяти", встроенное в отладчик или средство "Использование памяти" для последующего анализа.
Разработчики .NET могут выбрать средство распределения объектов .NET или средство Использование памяти.
- Средство выделения объектов .NET помогает определять закономерности и аномалии выделения в коде .NET, а также обнаруживать распространенные проблемы, связанные со сборкой мусора. Оно используется только в качестве инструмента последующего анализа. Этот инструмент можно запускать на локальных или удаленных компьютерах.
- Средство Использование памяти полезно при определении утечек в памяти, которые не являются характерными для приложений .NET. Если при проверке памяти необходимо использовать функции отладчика, например пошаговое выполнение кода, рекомендуется выбирать средство "Использование памяти", встроенное в отладчик.
Для анализа использования памяти с помощью средства использования памяти необходимо сделать хотя бы один моментальный снимок памяти. Часто наилучшим способом анализа памяти является создание двух снимков: первый создается непосредственно перед возникновением потенциальной проблемы с памятью, а второй — сразу же после возникновения этой проблемы. Затем можно просмотреть различия двух моментальных снимков и точно определить, что изменилось. На следующем рисунке показано создание моментального снимка с помощью средства, встроенного в отладчик.
При выборе одной из ссылок со стрелками вы дается разностное представление кучи (красная стрелка вверх показывает увеличение количества объектов (слева) или увеличение размера кучи (справа)). Если щелкнуть ссылку справа, откроется разностное представление кучи, упорядоченное по объектам, которые привели к максимальному увеличению размера кучи. Это может помочь выявить проблемы с памятью. Например, на следующем рисунке байты, используемые объектами ClassHandlersStore
, увеличены на 3 492 байт на втором моментальном снимке.
Если в представлении Использование памяти щелкнуть ссылку слева, представление кучи будет упорядочено по количеству объектов. Объекты определенного типа, количество которых максимально выросло, отображаются в верхней части (отсортированы по столбцу Count Diff (Разница числа)).
Инструментирование
Инструментирование аналогично средству использования ЦП, за исключением того, что он предоставляет точные счетчики вызовов и время настенных часов вместо использования ЦП. Метод инструментирования требует больше накладных расходов, чем средство использования ЦП. Это средство доступно в Профилировщике производительности. Откройте Профилировщик производительности, последовательно выбрав Отладка>Профилировщик производительности (или нажмите клавиши ALT + F2). Дополнительные сведения см. в разделе Инструментирование.
Проверка операций файлового ввода-вывода
Средство файлового ввода-вывода позволяет понять, как оптимизировать соответствующие операции, чтобы повысить производительность приложений. Если вы пытаетесь изучить и диагностировать время при медленной загрузке, новое средство файлового ввода-вывода позволит вам понять, как операции ввода-вывода влияют на затрачиваемое время. Это средство доступно в Профилировщике производительности. Откройте Профилировщик производительности, выбрав "Отладка > Профилировщик производительности" или нажав клавиши ALT+F2.
Средство покажет операции чтения и записи файлов в представлении списка с вкладками.
Проверка производительности с помощью PerfTips
Зачастую просмотреть сведения о производительности проще всего с помощью PerfTips. Используя подсказки, вы можете просматривать сведения о производительности непосредственно при взаимодействии с кодом. Можно проверить такие сведения, как длительность события (измеряется с момента последней приостановки отладчика или с момента запуска приложения). Например, при пошаговом выполнении кода (F10, F11) PerfTips отображает длительность выполнения приложения с операции на предыдущем шаге до текущего шага.
PerfTips можно использовать для проверки длительности выполнения блока кода или времени, необходимого для завершения работы одной функции.
PerfTips отображает те же события, которые также выводятся в представлении События средств диагностики. В представлении События приводятся различные события, которые возникают при отладке, например операция задания точки останова или пошагового выполнения кода.
Примечание.
Если у вас установлен выпуск Visual Studio Enterprise, на этой вкладке вы можете увидеть события IntelliTrace.
Анализ асинхронного кода (.NET)
Средство .NET Async позволяет проанализировать производительность асинхронного кода в приложении. Это средство доступно в Профилировщике производительности. Откройте Профилировщик производительности, последовательно выбрав Отладка>Профилировщик производительности (или нажмите клавиши ALT + F2).
Средство отображает все асинхронные операции в представлении списка. Вы можете просмотреть такие сведения, как время начала и окончания, а также общее время асинхронной операции.
Анализ асинхронного кода (.NET)
Средство .NET Async позволяет проанализировать производительность асинхронного кода в приложении. Это средство доступно в Профилировщике производительности. Откройте Профилировщик производительности, последовательно выбрав Отладка>Профилировщик производительности (или нажмите клавиши ALT + F2).
Средство отображает все асинхронные операции в представлении списка. Вы можете просмотреть такие сведения, как время начала и окончания, а также общее время асинхронной операции.
Анализ производительности базы данных (.NET Core)
Для приложений .NET Core, использующих ADO.NET или Entity Framework Core, средство для работы с базами данных позволяет записывать запросы к базам данных, которые приложение выполняет во время диагностического сеанса. Сведения об отдельных запросах затем можно анализировать, чтобы определить области для улучшения производительности приложения. Это средство доступно в Профилировщике производительности. Откройте Профилировщик производительности, последовательно выбрав Отладка>Профилировщик производительности (или нажмите клавиши ALT + F2).
Это средство отображает каждый запрос в представлении списка. Вы можете просмотреть такие сведения, как время начала и длительность запроса.
Визуализация счетчиков .NET (.NET Core)
Начиная с Visual Studio 2019 версии 16.7 вы можете использовать средство Счетчики .NET в Visual Studio для визуализации счетчиков производительности. Вы можете визуализировать счетчики, созданные с помощью счетчиков dotnet. Счетчики dotnet поддерживают множество счетчиков, такие как "Использование ресурсов ЦП" и "Размер кучи сборщика мусора".
Средство отображает текущие значения для каждого счетчика в представлении списка.
Изучение событий приложения
Средство просмотра общих событий позволяет просматривать действия приложения с помощью списка событий, таких как загрузка модуля, запуск потока и конфигурации системы. Это позволяет эффективнее диагностировать работу приложения в профилировщике Visual Studio. Это средство доступно в Профилировщике производительности. Откройте Профилировщик производительности, последовательно выбрав Отладка>Профилировщик производительности (или нажмите клавиши ALT + F2).
Это средство отображает каждое событие в представлении списка. Столбцы содержат сведения о каждом событии, например имя события, метку времени и идентификатор процесса.
Просмотр пользовательских событий на графиках временной шкалы
Вы можете программировать пользовательские события, которые отображаются в виде значков на графиках временной шкалы, таких как графики использования ЦП и временной шкалы использования памяти. Дополнительные сведения см. в разделе "Добавление меток пользователей на временную шкалу".
Анализ использования ресурсов (XAML)
В приложениях XAML, таких как классические приложения WPF и приложения универсальной платформы Windows, можно анализировать потребление ресурсов, используя средство "Временная шкала приложения". Например, вы можете проанализировать время, затраченное приложением на подготовку кадров пользовательского интерфейса (макет и обработка), обработку запросов от сети и дисков, а также на такие сценарии, как запуск приложения, загрузка страницы и изменение размера окон. Чтобы использовать это средство, выберите Временная шкала приложения в профилировщике производительности и нажмите кнопку Запустить. В приложении выполните сценарий с предполагаемой проблемой потребления ресурсов, а затем щелкните Остановка сбора, чтобы создать отчет.
Низкие значения частоты кадров на графе Пропускная способность визуализации может означать наличие проблем визуализации, присутствующих при запуске приложения. Аналогично, высокие показатели на графе Использование потока пользовательского интерфейса могут соответствовать проблемам со скоростью отклика пользовательского интерфейса. В отчете можно выбрать временной период предполагаемой проблемы производительности и затем в представлении "Подробная временная шкала" (нижняя панель) изучить подробные действия потока пользовательского интерфейса.
В представлении "Подробная временная шкала" находятся такие сведения, как тип действия (или затронутый элемент пользовательского интерфейса), а также длительность действия. Например, на рисунке событие Макета для элемента управления сетки длится 57,53 мс.
Дополнительные сведения см. в разделе Временная шкала приложения.
Проверка событий производительности и доступности пользовательского интерфейса (UWP)
В приложениях UWP в окне Средства диагностики можно включить параметр Анализ пользовательского интерфейса. Средство выполняет поиск общих проблем производительности или доступности и во время отладки отображает их в представлении События. В описаниях событий содержатся сведения, которые могут помочь при устранении неполадок.
Анализ использования GPU (Direct3D)
В приложениях Direct3D (компоненты Direct3D должны быть в C++) можно изучить действие GPU и проанализировать проблемы производительности. Дополнительные сведения см. в разделе Использование GPU. Чтобы использовать это средство, выберите Использование GPU в профилировщике производительности и нажмите кнопку Запустить. В приложении выполните нужные действия профилирования, а затем щелкните Остановка сбора, чтобы создать отчет.
Выберите период времени на графах и щелкните Просмотреть сведения. В нижней панели появится представление подробных сведений. В этом представлении можно узнать, сколько событий происходит в каждом ЦП и графическом процессоре. Выбирайте события в самой нижней панели, чтобы открывать всплывающие окна на временной шкале. Например, выберите событие Присутствующие, чтобы просмотреть всплывающие окна по вызову Присутствующий. (Светло-серые вертикальные линии Vsync можно использовать в качестве точек отсчета для понимания того, пропустили ли вертикальную синхронизацию определенные вызовы с типом Присутствующий. Требуется один вызов с типом Присутствующие между каждыми двумя вертикальными синхронизациями, чтобы приложение стабильно достигало 60 FPS.)
Графы также можно использовать для определения узких мест производительности ЦП или GPU.
Анализ производительности (устаревшие инструменты)
В Visual Studio 2019 устаревший Обозреватель производительности и связанные средства профилирования, такие как мастер производительности, были объединены в Профилировщик производительности, который можно открыть с помощью команды Отладка>Профилировщик производительности. В Профилировщике производительности доступные средства диагностики зависят от выбранного целевого объекта и текущего открытого запускаемого проекта. Инструмент "Загрузка ЦП" предоставляет возможности выборки, ранее поддерживаемые мастером производительности. Средство инструментирования предоставляет возможность профилирования с инструментированием (для точного числа и длительности вызовов), которая была представлена в мастере производительности. В Профилировщике производительности также содержатся дополнительные средства памяти.