Метод 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
См. также
Ссылки
Другие ресурсы
Профилирование (справочник по неуправляемым интерфейсам API)