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


Анализ использования памяти приложениями Магазина (VB, C#, C++)

В обновлении 2 для Visual Studio 2013 вы можете применять инструмент "Использование памяти" в разделе "Производительность и диагностика", чтобы анализировать использование памяти в приложениях среды выполнения Windows, написанных на C#, Visual Basic или C++ и XAML. В частности, доступны следующие возможности:

  • Мониторинг использования памяти приложением прямо в Visual Studio во время разработки сценария. Вам не нужно для этого использовать инструменты из системы и сторонних разработчиков.

  • Создание подробных моментальных снимков состояния памяти вашего приложения одним щелчком.

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

Примечание

В этом разделе описывается применение инструмента "Использование памяти" для анализа приложений на C# и Visual Basic.

Раздел "Производительность и диагностика" предоставляет множество возможностей для проведения сеанса диагностики и управления им.Например, вы можете запустить инструмент "Использование ЦП" в приложениях Магазина Windows Phone или Windows; а сеанс диагностики можно запустить на компьютере с Visual Studio, на устройстве Магазина Windows или Windows Phone, а также в одном из эмуляторов или имитаторов Visual Studio.См. раздел Запуск средств анализа производительности на странице "Производительность и диагностика".

Если вы хотите проанализировать использование памяти в приложениях Магазина Windows на базе JavaScript и HTML, обратитесь к разделу Анализ использования памяти (JavaScript).

Дополнительные сведения об инструменте "Использование памяти", включая принципы анализа приложений на C++ и C++/Cx, см. в статье Диагностирование проблем с памятью с помощью нового инструмента "Использование памяти" в Visual Studio блога по управлению жизненным циклом приложений корпорации Майкрософт.

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

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

  2. На панели меню выберите Отладка, Производительность и диагностика.

  3. В разделе "Производительность и диагностика" выберите Использование памяти и затем нажмите кнопку Запуск.

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

Выбор режима профилирования

Вы можете тестировать машинный компонент вместе с управляемым приложением в виде запускаемого проекта. Или, возможно, управляемое приложение — это просто окружение теста, и вас интересует только внутренняя память. Либо вы хотите установить связь между управляемым приложением и средой выполнения Windows. В такой ситуации выберите Параметры и один или несколько целевых языков.

Выбор языков программирования

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

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

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

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

По мере выполнения приложения вы можете опробовать новую функциональность или изучить сценарии, для которых имеются потенциальные проблемы. График "Использование памяти" показывает колебания объема памяти, используемого выполняемым приложением.

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

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

Остановка сбора

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

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

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

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

Страница обзора инструмента "Использование памяти"

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

Страница обзора использования памяти

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

Представления снимков позволяют открывать подробные отчеты в новых окнах Visual Studio. Существует два вида представлений снимков:

Ссылки для просмотра снимков

Нумерованные элементы на изображении представления снимков являются ссылками, открывающими представления отчетов инструмента "Использование памяти".

Шаг 1

Текст этой ссылки указывает общее число байт в памяти на момент получения снимка.

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

Шаг 2

Текст этой ссылки указывает общее число объектов в памяти на момент получения снимка.

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

Шаг 3

Текст этой ссылки указывает разницу между общим размером объектов в памяти, зафиксированным на момент получения данного снимка, и общим размером из предыдущего снимка.

В тексте этой ссылки указано положительно число, когда размер памяти этого снимка больше размера памяти предыдущего снимка, если же первый размер меньше второго, отображается отрицательное число. Текст ссылки Baseline (Базовый) указывает на то, что данный снимок является первым в сеансе диагностики; текст No Difference (Без различий) указывает на равенство значений.

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

Шаг 4

Текст этой ссылки указывает разницу между общим числом объектов в памяти для данного снимка и числом объектов из предыдущего снимка.

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

Отчеты по снимкам

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

Деревья отчетов по снимкам

Управляемая куча

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

Пути к корню

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

Объекты, на которые указывает ссылка

Дерево объектов со ссылками (сведения о снимке) и Дерево объектов со ссылками (разность снимков) показывают объекты, на которые ссылается выбранный тип или экземпляр.

Поля "Тип объекта" и "Экземпляр"

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

В качестве имен экземпляров используются уникальные идентификаторы, создаваемые инструментом "Использование памяти".

Совет

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

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

Основная часть приложений содержит неожиданно большое число типов, большинство из которых не представляют интереса для разработчика приложений. Инструмент "Использование памяти" определяет два фильтра, которые вы можете использовать для скрытия большинства таких типов в деревьях Управляемая куча и Пути к корню. Можно также осуществлять фильтрацию дерева по имени типа.

Параметры сортировки и фильтрации

Фильтр

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

Свернуть маленькие объекты

При применении данного фильтра типы, у которых значение Размер (байт) меньше 0,5 процента от общего размера памяти снимка, в списке Управляемая куча не отображаются.

Только мой код

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

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

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

Ссылки на отчет о снимке в представлении снимка

  • Ссылка МБ сортирует отчет по столбцу Инклюзивный размер (байт).

  • Ссылка объекты сортирует отчет по столбцу Количество.

Дерево "Управляемая куча" (сведения о снимке)

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

Дерево "Управляемая куча"

Тип объекта

Имя типа или экземпляра объекта.

Количество

Число экземпляров объекта типа. Для экземпляра это число всегда равно 1.

Размер (байт)

Для типа — это размер всех экземпляров типа в снимке памяти без учета размера объектов, содержащихся в этих экземплярах.

Для экземпляра, типа — это размер объекта без учета размера объектов, содержащихся в экземпляре. экземплярах.

Инклюзивный размер (байт)

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

Дерево "Пути к корню" (сведения о снимке)

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

Дерево "Пути к корню" для типов

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

Дерево "Объекты, на которые указывает ссылка" (сведения о снимке)

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

Дерево "Объекты со ссылками" для экземпляров

Тип объекта/Экземпляр

Имя типа или экземпляра объекта.

Размер (байт)

Для типа — это размер всех экземпляров типа без учета размера объектов, содержащихся в этом типе.

Для экземпляра — это размер объекта без учета размера объектов, содержащихся в объекте.

Инклюзивный размер (байт)

Размер экземпляров типа или размер экземпляра, включая размер содержащихся внутри объектов.

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

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

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

  • Ссылка МБ сортирует отчет по столбцу Инклюзивный размер (байт).

  • Ссылка объекты сортирует отчет по столбцу Количество.

Дерево "Управляемая куча" (разница между снимками)

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

Дерево "Управляемая куча" для типа в отчете о различиях

Обратите внимание, что столбцы Количество, Размер (байт) и Инклюзивный размер (байт) на изображении свернуты.

Тип объекта

Имя типа или экземпляра объекта.

Количество

Число экземпляров типа в основном снимке. Для экземпляра Количество всегда равно 1.

Разница количества

Для типа разница в количестве экземпляров типа между основным и предыдущим снимками. Для экземпляра это поле отображается пустым.

Размер (байт)

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

Разница общего размера (байт)

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

Инклюзивный размер (байт)

Размер объектов в основном снимке с учетом размера объектов, содержащихся в этих объектах.

Разница инклюзивного размера (байт)

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

Дерево "Пути к корню" (разница между снимками)

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

Дерево "Пути к корню" для экземпляров в представлении различий

Дерево "Объекты, на которые указывает ссылка" (разница между снимками)

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

Дерево "Объекты со ссылками" для экземпляров

Тип объекта/Экземпляр

Имя типа или экземпляра объекта.

Размер (байт)

Для экземпляра — это размер объекта в основном снимке без учета размера объектов, содержащихся в этом экземпляре.

Для типа — это общий размер экземпляров типа в основном снимке без учета размера объектов, содержащихся в этом экземпляре.

Инклюзивный размер (байт)

Размер объектов в основном снимке с учетом размера объектов, содержащихся в этих объектах.

См. также

Основные понятия

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

Анализ производительности приложений для Магазина Windows с помощью средств диагностики Visual Studio

Запуск средств анализа производительности на странице "Производительность и диагностика"

Другие ресурсы

Рекомендации по оптимизации производительности приложений Магазина Windows на основе C++, C# и Visual Basic