Анализ использования памяти с помощью средства выделения объектов .NET
Вы можете увидеть, сколько памяти использует приложение и какие пути кода выделяют большую память с помощью средства выделения объектов .NET.
После запуска средства вы увидите пути выполнения функции, в которых выделяются объекты. Затем можно выполнить трассировку обратно в корень дерева вызова, которое занимает большую память.
Для получения учебника, в котором показано, как повысить производительность, используя средство выделения объектов .NET, см. исследование: Руководство для начинающих по оптимизации кода .
Настройка
Выберите ALT+F2, чтобы открыть профилировщик производительности в Visual Studio.
Установите флажок отслеживания выделения объектов .NET.
выбранное средство отслеживания выделения объектов Dotnet
Нажмите кнопку «Пуск», чтобы запустить инструмент.
Если вы включите параметр Start with collection paused перед запуском профилировщика, данные не будут собираться, пока не выберите кнопку Record в представлении сеанса диагностики.
После того как инструмент запущен, перейдите к сценарию, который вы хотите профилировать в вашем приложении. Затем выберите Остановить сбор или закройте приложение, чтобы просмотреть данные.
Перейдите на вкладку выделения. Отображаются данные выделения памяти, аналогичные приведенным ниже.
Теперь можно проанализировать выделение памяти объектов.
Во время сбора данных средство отслеживания может замедлить работу профилируемого приложения. Если производительность средства отслеживания или приложения замедляется, и если вам не нужно отслеживать каждый объект, можно настроить частоту выборки. Для этого выберите символ шестеренки рядом со средством отслеживания на странице итогов профилирования.
Настройте частоту выборки в соответствии с нужной скоростью. Это изменение помогает ускорить производительность приложения во время сбора и анализа.
Для получения дополнительной информации о том, как сделать инструмент более эффективным, см. Оптимизация параметров профилировщика.
Поймите свои данные
В следующем графическом представлении на верхней диаграмме показано количество динамических объектов в приложении. Нижний график дельта-изменений показывает процентное изменение объектов приложения. Красные полосы указывают на то, что сборка мусора произошла.
Табличные данные можно отфильтровать для отображения действия только для заданного диапазона времени, выбрав диапазон времени. При этом сведения, отображаемые на вкладках, будут ограничены диапазоном отфильтрованного диапазона времени.
Вы также можете увеличить или уменьшить масштаб графа.
Распределение
В представлении выделения отображается расположение объектов, которые выделяют память и объем памяти, выделяемой этими объектами.
В виде выделения отображается следующая информация:
Столбец типа — это список классов и структур, которые занимают память. Дважды щелкните на типе, чтобы просмотреть его трассировку в виде инвертированного дерева вызовов. Только в представлении распределения можно увидеть элементы в выбранной категории, которые занимают память.
В столбце выделения отображается количество объектов, занимающих память в определенном типе выделения или функции. Этот столбец отображается только в представлении выделения, дерева вызовови функций.
Столбцы Количество байтов и Средний размер (байты) не отображаются по умолчанию. Чтобы отобразить их, щелкните правой кнопкой мыши в колонке Тип или Выделения, а затем выберите параметры Байты и Средний размер (байт), чтобы добавить их на диаграмму.
Два столбца похожи на Total (Allocations) и Self (Allocations), за исключением того, что они показывают объем занятой памяти, а не количество объектов, занимающих память. Эти столбцы отображаются только в представлении выделения.
В столбце имени модуля отображается модуль, содержащий вызываемую функцию или процесс.
Все эти столбцы можно сортировать. Для столбцов Type и Имя модуля можно сортировать элементы в алфавитном порядке по возрастанию или убыванию. Для выделения памяти , байтов и среднего размера (байтов) , вы можете отсортировать элементы по возрастанию или убыванию числового значения.
Символы
На вкладках Выделение, Дерево вызовови Функции отображаются следующие символы:
— тип значения, например целое число
— коллекция типов значений, например массив целых чисел
— ссылочный тип, например строка
— коллекция ссылочных типов, например массив строк
Дерево вызовов
В представлении "Дерево вызовов" отображаются пути выполнения функций, содержащие объекты, выделяющие большой объем памяти.
Следующие сведения отображаются в представлении дерева вызовов:
- В столбце имени функции отображается процесс или имя функции, содержащей объекты, которые выделяют память. Отображение основано на уровне проверяемого узла.
- Столбцы Total (Allocations) и Total Size (Bytes) показывают количество выделенных объектов и объем памяти, который используется функцией и всеми другими функциями, которые она вызывает. Столбец Общий размер (байты) скрыт по умолчанию.
- (Свои) и Self-Size (байт) отображают количество выделенных объектов и объем памяти, используемый одной выбранной функцией или типом выделения.
- В столбце Средний размер (байты) приводятся те же сведения, что и в представлении Выделения. Этот столбец скрыт по умолчанию.
- В столбце имени модуля отображается модуль, содержащий вызываемую функцию или процесс.
Дополнительные параметры, которые отображаются в представлении дерева вызовов :
- Кнопка Развернуть Горячий Маршрут выделяет маршрут выполнения функции, содержащий множество объектов, которые выделяют память. Алгоритм начинается с узла, который вы выбрали, и выделяет путь с наибольшим числом выделений, направляя вас в вашем исследовании.
- Кнопка Show Hot Path отображает или скрывает символы пламени, указывающие, какие узлы входят в состав горячего пути.
Функции
В представлении Функции показаны процессы, модули и функции, которые выделяют память.
Сведения, отображаемые в представлении функций, включают:
В столбце Name процессы отображаются в виде узлов верхнего уровня. Под процессами являются модули, а под ним — функции.
Следующие столбцы отображают те же сведения, что и в представлениях распределения и дерева вызовов :
- Итог (выделения)
- само (распределения)
- общий размер (байт)
- Размер (байты)
- средний размер (байт)
Коллекция
В представлении коллекции показано, сколько объектов было собрано или сохранено во время сборки мусора.
Следующие сведения отображаются в представлении коллекции .
- В столбце GC отображается идентификатор этой сборки мусора в жизненном цикле исполняемого файла.
- В столбце поколения показано поколение сборки мусора.
- В столбце типа GC показан тип этой сборки мусора.
- В столбце «Причина GC» показана причина этого сбора мусора.
- В столбце продолжительность приостановки отображается время, в течение которого выполнение было заблокировано, поскольку сборщику мусора требуется эксклюзивное использование кучи. Для фоновой сборки мусора это значение невелико.
- В столбце Размер LOH отображается размер кучи крупных объектов после запуска сборщика мусора.
- В столбце размер POH отображается размер кучи закрепленных объектов после запуска сборщика мусора.
- В столбце Finalizable Surv (МБ) отображается количество мегабайтов объектов, имеющих методы завершения (деструкторы), которые пережили сборку мусора.
- В столбце закрепленных объектов отображается число закрепленных объектов, которые способствовали сборке мусора.
- Столбец Собранные показывает количество объектов, собранных сборщиком мусора.
- В столбце отображается количество объектов, которые выжили после запуска сборщика мусора.
При выборе строки в этом представлении также отображаются круговые диаграммы для визуализации собранных и выживших объектов по типу.
Средства фильтрации
Виды распределения, дерево вызовови функции содержат опции показать только мой код и показать нативный код, а также поле фильтра.
- Показать только собственный код сворачивает системы, платформы и другие не пользовательские коды в [Внешний Код] кадры, чтобы вы могли сосредоточиться только на пользовательском коде. Дополнительные сведения см. в Отладка пользовательского кода с помощью функции "Мой код".
- показать машинный код отображает машинный код в целевом объекте анализа и может включать неиспользуемые коды.
- С помощью поля фильтра можно отфильтровать имя или имя функции на основе указанного значения. Введите строковое значение в поле. Затем в таблице показаны только типы, содержащие ту строку.