Анализ использования памяти с помощью средства выделения объектов .NET
С помощью средства выделения объектов .NET можно узнать, сколько памяти использует приложение и для каких путей к коду выделяется наибольший ее объем.
После запуска средства можно увидеть пути выполнения функций, для которых выделяются объекты. Затем можно проследить путь к корню дерева вызовов, который использует больше всего памяти.
Руководство по улучшению производительности с помощью средства выделения объектов .NET см . в руководстве по оптимизации кода для начинающих.
Настройка
Откройте профилировщик производительности (ALT+F2) в Visual Studio.
Установите флажок .NET Object Allocation Tracking (Отслеживание выделения объектов .NET).
Нажмите кнопку Пуск, чтобы запустить средство.
Если вы включите параметр "Пуск с приостановленной коллекцией" перед запуском профилировщика, данные не будут собираться до нажатия кнопки "Запись " в представлении сеанса диагностики.
После его запуска просмотрите сценарий, который вы хотите профилировать в приложении. Затем выберите Остановить сбор или закройте приложение, чтобы просмотреть данные.
Выберите вкладку "Выделение ". Отображаются данные выделения памяти, аналогичные приведенным ниже.
Теперь вы можете проанализировать выделение памяти объектам.
Во время сбора средство отслеживания может замедлить работу профилированного приложения. Если производительность средства отслеживания или приложения замедлена и если не требуется отслеживать каждый объект, можно настроить частоту выборки. Для этого на странице сводки профилировщика рядом со средством отслеживания щелкните значок шестеренки.
Настройте необходимую частоту выборки. Такое изменение улучшит производительность приложения во время сбора и анализа.
Дополнительные сведения о том, как сделать средство более эффективным, см. в статье Оптимизация параметров профилировщика.
Расшифровка данных
В следующем графическом представлении на верхней диаграмме показано количество динамических объектов в приложении. На нижнем графе Object delta (Изменение объекта) показано процентное изменение объектов приложения. Красные столбцы обозначают, что была проведена сборка мусора.
Табличные данные можно отфильтровать для отображения действия только для заданного диапазона времени, выбрав диапазон времени. При этом сведения, отображаемые на вкладках, будут ограничены диапазоном отфильтрованного диапазона времени.
Можно также увеличивать или уменьшать граф.
Распределение
В представлении Выделение показано местонахождение объектов, которым выделена память, и объем выделенной им памяти.
В представлении выделения отображаются следующие сведения:
Столбец Тип содержит список классов и структур, занимающих память. Дважды щелкните тип, чтобы просмотреть его обратную трассировку в виде инвертированного дерева вызовов. Только в представлении Выделение можно просмотреть элементы в выбранной категории, занимающей память.
В столбцеВыделения показано количество занимающих память объектов, относящихся к определенному типу выделения или функции. Этот столбец отображается только в представлениях Выделение, Дерево вызовов и Функции.
СтолбцыБайты и Средний размер (байты) по умолчанию скрыты. Чтобы их отобразить, щелкните правой кнопкой мыши столбецТип или Выделения, а затем выберите параметры Байты и Средний размер (байты), чтобы добавить их в диаграмму.
Эти два столбца похожи на Всего (выделения) и Собственные (выделения) за тем исключением, что вместо количества объектов, занимающих память, в них показан общий объем занимаемой памяти. Эти столбцы отображаются только в представлении Выделение.
В столбце Имя модуля показан модуль, содержащий вызывающую функцию или процесс.
Все эти столбцы можно сортировать. Для столбцов Тип и Имя модуля можно сортировать элементы в алфавитном порядке по возрастанию или убыванию. Для столбцов Выделения, Байты и Средний размер (байт) можно сортировать элементы по увеличению или уменьшению числовых значений.
Символы
На вкладках Выделение, Дерево вызовов и Функции отображаются следующие символы:
— тип значения, например целое число
— коллекция типов значений, например массив целых чисел
— ссылочный тип, например строка
— коллекция ссылочных типов, например массив строк
Дерево вызовов
В представлении Дерево вызовов отображаются пути выполнения функций, содержащие объекты, для которых выделяется много памяти.
В представлении дерева вызовов отображаются следующие сведения:
- В столбце Имя функции показан процесс или имя функции, содержащей объекты, для которых выделяется память. Отображение зависит от уровня проверяемого узла.
- В столбцах Всего (выделения) и Общий размер (байты) отображается количество выделенных объектов и объем памяти, используемые функцией и всеми другими функциями, которые она вызывает. По умолчанию столбец total Size (Bytes) скрыт.
- В столбцах Self (Allocations) (Собственные (выделения)) и Self-Size (Bytes) (Собственный размер (байт)) отображается количество выделенных объектов и объем памяти, используемый одной выбранной функцией или типом выделения.
- В столбце Average Size (Bytes) (Средний размер (байт)) отображаются те же сведения, что и в представлении Выделения. Этот столбец по умолчанию скрыт.
- В столбце Имя модуля показан модуль, содержащий вызывающую функцию или процесс.
Дополнительные параметры, которые отображаются в представлении "Дерево вызовов", включают:
- При нажатии кнопки Развернуть критический путь высвечивается путь выполнения функции, содержащий множество объектов, для которых выделяется память. Алгоритм высвечивает путь с наибольшим количеством выделений, начиная с выбранного узла, помогая изучать использование памяти.
- Кнопка Показать критический путь отображает или скрывает значки пламени, указывающие, какие узлы входят в критический путь.
Функции
В представлении Функции показаны процессы, модули и функции, для которых выделяется память.
Сведения, отображаемые в представлении "Функции ", включают:
В столбце Имя отображаются процессы в качестве узлов верхнего уровня. Под процессами располагаются модули, а под ними — функции.
В следующих столбцах отображаются те же сведения, что и в представлениях дерева выделения и вызова:
- Всего (выделение)
- Self (Allocations) (Собственные (выделения));
- Общий размер (байт);
- Self-Size (Bytes) (Собственный размер (байт));
- Average Size (Bytes) (Средний размер (байт)).
Коллекция
В представлении Коллекция показано, сколько объектов было собрано или осталось во время сборки мусора.
В представлении коллекции отображаются следующие сведения.
- В столбце GC показан идентификатор этой сборки мусора в жизненном цикле исполняемого файла.
- В столбце "Поколение " показано создание сборки мусора.
- В столбце типа GC отображается тип этой сборки мусора.
- В столбце "Причина сборки мусора" показана причина этого события сборки мусора.
- В столбце "Длительность приостановки" показано время, когда выполнение было заблокировано, так как сборщик мусора нуждается в эксклюзивном использовании кучи. Для фоновой сборки мусора это значение невелико.
- В столбце "Размер loH" отображается размер кучи больших объектов после запуска сборщика мусора.
- В столбце "Размер POH" отображается размер кучи закрепленных объектов после запуска сборщика мусора.
- В столбце Surv (MB) отображается количество объектов, имеющих методы завершения (деструкторы), которые пережили сборку мусора.
- В столбце закрепленных объектов отображается число закрепленных объектов, которые способствовали сборке мусора.
- В столбце Собрано показано количество объектов, собранных сборщиком мусора.
- В столбце Осталось показано количество объектов, сохранившихся после работы сборщика мусора.
При выборе строки в этом представлении также отображаются круговые диаграммы для визуализации собранных и выживших объектов по типу.
Средства фильтрации
В каждом из представлений Выделения, Дерево вызовов и Функции есть параметры Показать только мой код и Show Native Code (Показать машинный код), а также поле фильтра.
- Параметр Показать только мой код сворачивает системный код, код платформ и другой код, не написанный пользователем, во фреймы [Внешний код], чтобы можно было сосредоточиться только на пользовательском коде. Дополнительные сведения см. в статье Отладка пользовательского кода с использованием параметра "Только мой код".
- Параметр Show Native Code (Показать машинный код) отображает машинный код целевого объекта анализа и может содержать код, не являющийся пользовательским.
- Поле фильтра позволяет отфильтровать столбец Имя или Имя функции по указанному значению. Введите в поле строковое значение. Затем в таблице отобразятся только типы, содержащие эту строку.