Счетчики памяти
В консоли "Производительность" в категории .NET CLR Memory имеются счетчики, предоставляющие сведения о сборщике мусора. Эти счетчики производительности представлены в следующей таблице.
Счетчик производительности |
Описание |
---|---|
# байтов во всех кучах |
Показывает сумму значений счетчиков Gen 1 Heap Size, Gen 2 Heap Size и Gen 3 Heap Size. Этот счетчик показывает текущий объем памяти в байтах, выделенной в кучах сборки мусора. |
# Указатели GC |
Показывает текущее число используемых указателей сборки мусора. Указатели сборки мусора представляют собой обработчики ресурсов, внешних по отношению к среде CLR и управляемой среде. |
# коллекций Gen 0 |
Показывает, сколько раз объекты нулевого поколения (т.е. самые молодые, позже всех выделенные объекты) были обработаны сборщиком мусора с момента запуска приложения. Сборка мусора нулевого поколения происходит в случае, когда доступной нулевому поколению памяти недостаточно для удовлетворения всех запросов на выделение памяти. Приращение этого счетчика происходит в конце сборки мусора нулевого поколения. Сборка мусора старших поколений включает сборку и для младших поколений. Приращение этого счетчика в явном виде происходит при сборке мусора старших поколений (поколений 1 и 2). Этот счетчик показывает последнее наблюдаемое значение. Значение счетчика _Global_ не точное и его следует игнорировать. |
# коллекций Gen 1 |
Показывает, сколько раз с момента запуска приложения объекты поколения 1 были обработаны сборщиком мусора. Приращение этого счетчика происходит в конце сборки мусора первого поколения. Сборка мусора старших поколений включает сборку и для младших поколений. Приращение этого счетчика в явном виде происходит при сборке мусора старшего поколения (поколение 2). Этот счетчик показывает последнее наблюдаемое значение. Значение счетчика _Global_ не точное и его следует игнорировать. |
# коллекций Gen 2 |
Показывает, сколько раз с момента запуска приложения объекты поколения 2 были обработаны сборщиком мусора. Приращение этого счетчика происходит в конце сборки мусора второго поколения (называемой также полной сборкой мусора). Этот счетчик показывает последнее наблюдаемое значение. Значение счетчика _Global_ не точное и его следует игнорировать. |
# принудительных GC |
Показывает пиковое число выполненных сборок мусора в результате явного вызова GC.Collect. Рекомендуется предоставить сборщику мусора разрешение на настройку частоты выполнения его операций. |
# закрепленных объектов |
Показывает число закрепленных объектов, встретившихся при последней сборке мусора. Закрепленные объекты — это такие объекты, которые сборщик мусора не может перемещать в памяти. Этот счетчик отслеживает закрепленные объекты только в кучах, используемых для сборки мусора. Например, сборка мусора нулевого поколения вызывает перечисление закрепленных объектов только в куче нулевого поколения. |
# используемых блоков синхронизации |
Показывает текущее число используемых блоков синхронизации. Блоки синхронизации — это связанные с объектами структуры данных, выделенные для хранения сведений о синхронизации. Блоки синхронизации поддерживают слабые ссылки на управляемые объекты и они должны просматриваться сборщиком мусора. В этих блоках хранятся не только сведения о синхронизации; в них также могут храниться метаданные COM-взаимодействия. Этот счетчик указывает на проблемы с производительностью, возникающие при интенсивном использовании примитивов синхронизации. |
# всего байтов, используемых для виртуальной памяти |
Показывает размер виртуальной памяти в байтах, выделенной в данный момент сборщиком мусора. Выделенная память представляет собой физическую память, для которой зарезервировано пространство в файле подкачки диска. |
# всего зарезервированных байтов |
Отображает объем виртуальной памяти. (в байтах), в настоящий момент зарезервированный сборщиком мусора. Зарезервированная память – это виртуальная память, зарезервированная для приложения без использования файлов подкачки диска или страниц основной памяти. |
% времени на сборку мусора |
Показывает процент времени, потраченный на сбор мусора с момента последнего цикла сборки мусора. Этот счетчик обычно описывает работу по очистке и сжатию памяти, выполненную сборщиком мусора по поручению приложения. Изменение показаний этого счетчика происходит только в конце каждой сборки мусора. Усреднения по времени не происходит; отображается только последнее значение. |
выделяемых в секунду байтов |
Показывает число байтов, выделяемых за секунду в куче, в которой производится сборка мусора. Изменение показаний этого счетчика происходит в конце каждой сборки мусора, а не при каждом выделении памяти. Усреднение по времени не производится; отображается разность значений двух последних выборок, деленная на длительность интервала выборки. |
Уцелевших объектов на завершение |
Показывает число объектов, подлежащих сборке мусора, но уцелевших в этом процессе, поскольку они ожидают завершения. Если эти объекты содержат ссылки на другие объекты, то последние также уцелеют, но не будут учтены в показаниях этого счетчика. Счетчики Promoted Finalization-Memory from Gen 0 и Promoted Finalization-Memory from Gen 1 показывают всю память, уцелевшую в результате ожидания завершения. Этот счетчик не является накопительным. Его значение изменяется по завершении каждой сборки мусора и равно количеству объектов, уцелевших только в этой конкретной операции. Этот счетчик указывает на дополнительные издержки, которые могут возникнуть в приложении вследствие завершения. |
размер кучи Gen 0 |
Показывает наибольшее число байтов, которые могут быть распределены в поколении 0; не показывает текущее количество байтов, распределенных в этом поколении. Сборка мусора нулевого поколения происходит в том случае, когда распределение с момента последней сборки превышает это значение. Размер нулевого поколения настраивается сборщиком мусора и может изменяться в процессе выполнения приложения. В конце сборки нулевого поколения размер кучи нулевого поколения равен 0 байт. Этот счетчик показывает размер (в байтах) выделений памяти, вызывающих следующую сборку мусора нулевого поколения. Изменение показаний этого счетчика происходит в конце сборки мусора, а не при каждом выделении памяти. |
байтов в сек, перешедших из Gen 0 |
Отображает количество байтов в секунду, перешедших из поколения 0 в поколение 1. Переход памяти осуществляется после того, как она уцелела при сборке мусора. Этот счетчик является индикатором сравнительно долгоживущих объектов, созданных за секунду. Счетчик отображает разность значений двух последних выборок, деленная на длительность интервала выборки. |
размер кучи Gen 1 |
Отображает текущее количество байтов в поколении 1; этот счетчик не показывает максимальный размер поколения 1. Объекты не распределяются непосредственно в это поколение, они переходят в него из поколения 0 в результате сборки мусора. Изменение показаний этого счетчика происходит в конце сборки мусора, а не при каждом выделении памяти. |
байтов в сек, перешедших из Gen 1 |
Отображает количество байтов в секунду, перешедших из поколения 1 в поколение 2. Объекты, передаваемые только потому, что они ожидают выполнения операции Finalize, не учитываются этим счетчиком. Переход памяти осуществляется после того, как она уцелела при сборке мусора. Ничто не переходит из поколения 2, поскольку это поколение является старейшим. Этот счетчик является индикатором самых долгоживущих объектов, созданных за секунду. Счетчик отображает разность значений двух последних выборок, деленная на длительность интервала выборки. |
размер кучи Gen 2 |
Показывает текущее число байтов в поколении 2. Объекты не распределяются непосредственно в это поколение, они переходят в него из поколения 1 в результате сборки мусора поколения 1. Изменение показаний этого счетчика происходит в конце сборки мусора, а не при каждом выделении памяти. |
размер кучи больших объектов |
Показывает текущий размер (в байтах) кучи больших объектов. Объекты размером более 20 КБ рассматриваются сборщиком мусора как большие объекты и распределяются в специальную кучу. Они не переходят из поколения в поколение. Изменение показаний этого счетчика происходит в конце сборки мусора, а не при каждом выделении памяти. |
байтов памяти, перешедших из Gen 0 из-за завершения |
Показывает количество байтов памяти, перешедших из поколения 0 в поколение 1 только потому, что ожидается завершение. Этот счетчик не накапливает результаты. Он показывает значение, наблюдаемое в конце последней сборки мусора. |
байтов памяти, перешедших из Gen 1 из-за завершения |
Показывает количество байтов памяти, перешедших из поколения 1 в поколение 2 только потому, что они ожидают завершение. Этот счетчик не накапливает результаты. Он показывает значение, наблюдаемое в конце последней сборки мусора. Счетчик обнуляется, если последняя сборка мусора была связана только с поколением 0. |
число байтов памяти переходящих из Gen 0 |
Показывает количество байтов памяти, переживших сбор мусора и перешедших из поколения 0 в поколение 1. Объекты, передаваемые только потому, что они ожидают выполнения операции Finalize, не учитываются этим счетчиком. Этот счетчик не накапливает результаты. Он показывает значение, наблюдаемое в конце последней сборки мусора. |
число байтов памяти переходящих из Gen 1 |
Показывает количество байтов памяти, переживших сбор мусора и перешедших из поколения 1 в поколение 2. Объекты, передаваемые только потому, что они ожидают выполнения операции Finalize, не учитываются этим счетчиком. Этот счетчик не накапливает результаты. Он показывает значение, наблюдаемое в конце последней сборки мусора. Счетчик обнуляется, если последняя сборка мусора была связана только с поколением 0. |
См. также
Ссылки
Профилирование среды выполнения
Основные понятия
Автоматическое управление памятью