Анализ использования памяти без использования отладки в Профилировщике производительности (C#, Visual Basic, C++, F#)

Средство Использование памяти отслеживает использование памяти в приложении. Вы можете использовать его для изучения воздействия сценариев, разрабатываемых в Visual Studio, на память в режиме реального времени. Можно создавать подробные моментальные снимки состояния памяти приложения и сравнивать их для выявления первопричин проблем с памятью. Средство использования памяти поддерживается в приложениях .NET, ASP.NET, C++ и смешанных приложениях (на основе .NET и машинного кода).

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

Диагностические сеансы по использованию памяти

Запуск диагностического сеанса по использованию памяти:

  1. Откройте проект в Visual Studio.

    Средство использования памяти поддерживает приложения .NET, ASP.NET, C++ и смешанные приложениях (на основе .NET и машинного кода).

  2. В меню "Отладка" установите для решения конфигурацию Выпуск и выберите цель развертывания Локальный отладчик Windows (или Локальный компьютер).

  3. В строке меню выберите Отладка>Профилировщик производительности.

  4. В разделе Доступные инструменты выберите Использование памяти и затем щелкните Запустить.

    Start a Memory Usage diagnostic session

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

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

Screenshot of the Diagnostic Tools window in the Visual Studio Performance Profiler showing a timeline graph of the app's memory use.

Screenshot of the Diagnostic Tools window in the Visual Studio Performance Profiler showing a timeline graph of the app's memory use.

График временной шкалы показывает колебания объема памяти по мере выполнения приложения. Пики на графике обычно указывают на то, что некоторый код собирает или создает данные, а после обработки удаляет их. Крупные пики обозначают области, которые можно оптимизировать. Обращайте внимание на области увеличения потребления памяти, которые не нормализуются. Они могут указывать на неэффективное использование памяти или даже ее утечку.

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

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

Чтобы сделать моментальные снимки, когда вы захотите зафиксировать данные о памяти, выберите Сделать снимок.

Закрытие сеанса диагностики

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

Stop Collection

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

Отчеты об использовании памяти

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

Screenshot of the overview page in the Memory Usage tool in the Visual Studio Performance Profiler, showing a memory usage graph and two snapshot panes.

Screenshot of the overview page in the Memory Usage tool in the Visual Studio Performance Profiler, showing a memory usage graph and two snapshot panes.

Моментальные снимки использования памяти

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

Эти числа являются ссылками, открывающими подробные представления отчетов Использование памяти в новых окнах Visual Studio. Подробный отчет о снимках отображает типы и экземпляры в одном моментальном снимке. Разностный отчет по снимкам (diff) показывает сравнение типов и экземпляров на двух моментальных снимках.

Snapshot view links

Изображения Description
Step 1 Общее число байт в памяти на момент получения снимка. Выберите эту ссылку, чтобы отобразить подробный отчет о снимках с сортировкой по общему размеру экземпляров типов.
Step 2 Общее число объектов в памяти на момент получения снимка. Выберите эту ссылку, чтобы отобразить подробный отчет о снимках с сортировкой по числу экземпляров типов.
Step 3 Разница между общим размером объектов в памяти для данного и предыдущего снимков. Положительное число означает, что размер памяти этого снимка больше размера памяти предыдущего снимка, если же первый размер меньше второго, отображается отрицательное число. Базовый означает, что моментальный снимок является первым в диагностическом сеансе. Нет различий означает, что разница равна нулю. Выберите эту ссылку, чтобы отобразить разностный отчет о снимках с сортировкой по разности общих размеров экземпляров типов.
Step 4 Разница между общим числом объектов в памяти для данного и предыдущего снимков. Щелкните эту ссылку, чтобы вывести отчет о различиях между снимками. Он отсортирован по расхождениям в общем количестве экземпляров типов.

Snapshot view links

Изображения Description
Step 1 Общее число объектов в памяти на момент получения снимка. Выберите эту ссылку, чтобы отобразить подробный отчет о снимках с сортировкой по числу экземпляров типов.
Step 2 Разница между общим числом объектов в памяти для данного и предыдущего снимков. Выберите эту ссылку, чтобы отобразить разностный отчет о снимках с сортировкой по разности общих количеств экземпляров типов.
Step 3 Общее число байт в памяти на момент получения снимка. Выберите эту ссылку, чтобы отобразить подробный отчет о снимках с сортировкой по общему размеру экземпляров типов.
Step 4 Разница между общим размером объектов в памяти для данного и предыдущего снимков. Положительное число означает, что размер памяти этого снимка больше размера памяти предыдущего снимка, если же первый размер меньше второго, отображается отрицательное число. Базовый означает, что моментальный снимок является первым в диагностическом сеансе. Нет различий означает, что разница равна нулю. Выберите эту ссылку, чтобы отобразить разностный отчет о снимках с сортировкой по разности общих размеров экземпляров типов.

Отчеты о снимках "Использование памяти"

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

Memory Usage snapshot report

Memory Usage snapshot report

Если текст Тип объекта выделен голубым цветом, его можно выбрать для перехода к соответствующему объекту в исходном коде в отдельном окне.

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

В отчете о снимках:

  • В дереве Управляемая память отображаются типы и экземпляры из отчета. При выборе типа или экземпляра отображаются деревья Пути к корню и Объекты, на которые указывает ссылка для выбранного элемента.

  • Дерево Пути к корню показывает цепочку объектов, ссылающихся на тип или экземпляр. Сборщик мусора .NET очищает память для объекта только после освобождения всех ссылок на него.

  • Дерево Типы, на которые указывает ссылка или Объекты, на которые указывает ссылка показывает объекты, на которые ссылается выбранный тип или экземпляр.

Фильтры дерева отчетов

Многие типы не требуются разработчикам приложений. Фильтры отчетов о снимках позволяют скрыть большинство таких типов в деревьях Управляемая память и Пути к корню.

Sort and filter options

Sort and filter options

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

  • Выберите Свернуть маленькие объекты в раскрывающемся списке Фильтр, чтобы скрыть все типы, у которых Размер (байт) меньше 0,5 процента от общего объема памяти.

  • Выберите Только мой код в раскрывающемся списке Фильтр, чтобы скрыть большинство экземпляров, созданных внешним кодом. Внешние типы принадлежат операционной системе или компонентам платформы либо создаются компилятором.

Подробные отчеты о снимках

Подробный отчет о снимках описывает один снимок из диагностического сеанса. Чтобы открыть отчет, выберите ссылку размера или объектов в области моментального снимка.

Links to snapshot report in a snapshot pane

Links to snapshot report in a snapshot pane

Обе ссылки открывают один и тот же отчет. Единственное различие заключается в начальном порядке сортировки дерева Управляемая память. Ссылка размера сортирует отчет по столбцу Инклюзивный размер (байт). Ссылка объектов сортирует отчет по столбцу Количество. Вы можете изменить порядок или столбец сортировки после открытия отчета.

Дерево управляемой памяти (отчеты сведений о моментальных снимках)

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

Managed Heap tree

Managed Memory tree

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

Имя Описание
Тип объекта Имя типа или экземпляра объекта.
Численность Число экземпляров объекта типа. Для экземпляра Количество всегда равно 1.
Размер (байт) Для типа: размер всех экземпляров типа на снимке за вычетом объектов, содержащихся в экземплярах. Для экземпляра: размер объекта за вычетом объектов, содержащихся в экземпляре.
Инклюзивный размер (байт) Размер экземпляров типа или размер отдельного экземпляра, включая размер содержащихся внутри объектов.
Модуль Модуль, содержащий объект.

Пути к корневому дереву (отчеты сведений о моментальном снимке)

Дерево Пути к корню показывает цепочку объектов, ссылающихся на тип или экземпляр. Сборщик мусора .NET очищает память для объекта только после освобождения всех ссылок на него.

Для типа в дереве Пути к корню число объектов, которые содержат ссылки на этот тип, отображается в столбце Количество ссылок.

Paths to Root tree for types

Paths to Root tree for types

Ссылки на типы или дерево ссылочных объектов (отчеты о сведениях моментального снимка)

Дерево Типы, на которые указывает ссылка или Объекты, на которые указывает ссылка показывает объекты, на которые ссылается выбранный тип или экземпляр.

Referenced Objects tree for instances

Referenced Objects tree for instances

Дерево Типы, на которые указывает ссылка в подробном отчете о снимках содержит следующие столбцы: Дерево Объекты, на которые указывает ссылка не содержит столбец Количество ссылок.

Имя Описание
Тип объекта или Экземпляр Имя типа или экземпляра.
Количество ссылок Для типов это число экземпляров объекта типа.
Размер (байт) Для типа — это размер всех экземпляров типа без учета размера объектов, содержащихся в этом типе. Для экземпляра — это размер объекта без учета размера объектов, содержащихся в объекте.
Инклюзивный размер (байт) Размер экземпляров типа или размер экземпляра, включая размер содержащихся внутри объектов.
Модуль Модуль, содержащий объект.

Разностные отчеты по снимкам (diff)

Разностный отчет по снимкам (diff) показывает изменения между основным и предыдущим снимками. Чтобы открыть разностный отчет, выберите одну из ссылок различия в области снимка.

Обе ссылки открывают один и тот же отчет. Единственное различие заключается в начальном порядке сортировки дерева Управляемая память в этом отчете. Ссылка размера сортирует отчет по столбцу Разница инклюзивного размера (байт). Ссылка объектов сортирует отчет по столбцу Разница по количеству. Вы можете изменить порядок или столбец сортировки после открытия отчета.

Links to difference report in a snapshot pane

Links to difference report in a snapshot pane

Дерево управляемой памяти (отчеты о разных моментальных снимках)

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

Managed Heap tree for a type in difference report

Managed Memory tree for a type in difference report

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

Имя Описание
Тип объекта Имя типа или экземпляра объекта.
Численность Число экземпляров типа в основном снимке. Для экземпляра Количество всегда равно 1.
Разница количества Для типа разница в количестве экземпляров типа между основным и предыдущим снимками. Для экземпляра это поле отображается пустым.
Размер (байт) Размер объектов в основном снимке без учета размера объектов, содержащихся в этих объектах. Для типа Размер (байт) и Инклюзивный размер (байт) — это общие размеры экземпляров типа.
Разница общего размера (байт) Для типа — это разница в общем размере экземпляров типа между основным снимком и предыдущим снимком без учета размера объектов, содержащихся в этих экземплярах. Для экземпляра это поле отображается пустым.
Инклюзивный размер (байт) Размер объектов в основном снимке без учета размера объектов, содержащихся в этих объектах.
Разница инклюзивного размера (байт) Для типа — это разница в размере всех экземпляров типа между основным снимком и предыдущим снимком с учетом размера объектов, содержащихся в этих объектах. Для экземпляра это поле отображается пустым.
Модуль Модуль, содержащий объект.

Пути к корневому дереву (отчеты о разных моментальных снимках)

Дерево Пути к корню показывает цепочку объектов, ссылающихся на тип или экземпляр. Сборщик мусора .NET очищает память для объекта только после освобождения всех ссылок на него.

Для типа в дереве Пути к корню число объектов, которые содержат ссылки на этот тип, отображается в столбце Количество ссылок. Разница по количеству от предыдущего снимка указана в столбце в Reference Diff (Разница по ссылкам).

Paths To Root tree in a diff report

Paths To Root tree in a diff report

Ссылки на типы или дерево ссылочных объектов (отчеты моментального снимка)

Дерево Типы, на которые указывает ссылка или Объекты, на которые указывает ссылка показывает объекты, на которые ссылается выбранный тип или экземпляр.

Referenced Types in a diff report

Referenced Types in a diff report

Дерево Типы, на которые указывает ссылка в отчете о различиях снимков содержит следующие столбцы: Дерево Объекты, на которые указывает ссылка имеет столбцы Экземпляр, Размер (байт), Инклюзивный размер (байт) и Модуль.

Имя Описание
Тип объекта или Экземпляр Имя типа или экземпляра объекта.
Количество ссылок Число экземпляров типа в основном снимке.
Разница числа ссылок Для типа разница в количестве экземпляров типа между основным и предыдущим снимками.
Размер (байт) Размер объектов в основном снимке без учета размера объектов, содержащихся в этих объектах. Для типа Размер (байт) и Инклюзивный размер (байт) — это общие размеры экземпляров типа.
Разница общего размера (байт) Для типа — это разница в общем размере экземпляров типа между основным снимком и предыдущим снимком без учета размера объектов, содержащихся в этих экземплярах.
Инклюзивный размер (байт) Размер объектов в основном снимке без учета размера объектов, содержащихся в этих объектах.
Разница инклюзивного размера (байт) Для типа — это разница в размере всех экземпляров типа между основным снимком и предыдущим снимком с учетом размера объектов, содержащихся в этих объектах.
Модуль Модуль, содержащий объект.

Аналитический отчет

В Visual Studio 2022 средство анализа памяти также предоставляет несколько мощных встроенных средств автоматической аналитики для управляемой памяти. Перейдите на вкладку Аналитика в отчетах управляемых типов и отображаются применимые автоматические аналитические сведения, такие как повторяющиеся строки, разреженные массивы и утечки обработчика событий. Дополнительные сведения см. в Аналитика использования памяти.

Screenshot of Managed memory insights.