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


Метод ICorProfilerInfo2::GetGenerationBounds

Получает области памяти, являющиеся сегментами кучи, образующей различные поколения сборки мусора.

HRESULT GetGenerationBounds(
    [in]  ULONG cObjectRanges,
    [out] ULONG *pcObjectRanges,
    [out, size_is(cObjectRanges), length_is(*pcObjectRanges)] COR_PRF_GC_GENERATION_RANGE ranges[]);

Параметры

  • cObjectRanges
    [in] Число элементов, выделенных вызывающим объектом для массива ranges.

  • pcObjectRanges
    [out] Указатель на целое число, которое задает общее количество диапазонов, которые все или частично будут возвращены в массив ranges.

  • ranges
    [out] Массив структур COR_PRF_GC_GENERATION_RANGE, каждая из которых описывает диапазон (иными словами, блок) памяти в пределах поколения, в котором ведется сборка мусора.

Заметки

Метод GetGenerationBounds можно вызвать посредством любого обратного вызова профилировщика при условии, что в данный момент сборка мусора не выполняется. То есть, вызов можно осуществлять посредством любого обратного вызова, за исключением обратных вызовов, выполняемых между ICorProfilerCallback2::GarbageCollectionStarted и ICorProfilerCallback2::GarbageCollectionFinished.

Большинство смещений задач поколений происходит во время сборки мусора. Поколения могут наращиваться от сборки к сборке, однако не могут перемещаться между ними. Поэтому вызов GetGenerationBounds лучше осуществлять на промежутке между ICorProfilerCallback2::GarbageCollectionStarted и ICorProfilerCallback2::GarbageCollectionFinished.

При запуске программы некоторые объекты выделяются самой средой CLR, обычно — в 3-м и 0-м поколении. Поэтому к моменту начала выполнения кода эти поколения уже содержат объекты. Поколения 1 и 2 обычно пусты, и могут содержать разве что пустые объекты, созданные сборщиком мусора. (Размер пустых объектов равен 12 байтов в 32-разрядной реализации среды CLR; в 64-разрядной реализации их размер больше.) Кроме того, как можно видеть, внутри модуля, созданного генератором образа в машинном коде (NGen.exe), существует 2 диапазона. В данном случае объекты поколения 2 являются замороженными объектами, которые выделяются при выполнении программы NGen.exe, а не сборщика мусора.

Эта функция использует буфер, выделенный вызывающим объектом. Дополнительные сведения см. в разделе Соглашения методов интерфейса API для профилирования.

Требования

Платформы: см. раздел Требования к системе для .NET Framework.

Заголовок: CorProf.idl, CorProf.h

Библиотека: CorGuids.lib

Версии платформы .NET Framework: 4, 3.5 с пакетом обновления 1 (SP1), 3.5, 3.0 с пакетом обновления 1 (SP1), 3.0, 2.0 с пакетом обновления 1 (SP1), 2.0

См. также

Ссылки

Интерфейс ICorProfilerInfo

Интерфейс ICorProfilerInfo2

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

Профилирующие интерфейсы

Профилирование (справочник по неуправляемым интерфейсам API)