Метод ICorProfilerCallback2::SurvivingReferences
Сообщает структуру объектов в куче как результат несжимающей сборки мусора.
HRESULT SurvivingReferences(
[in] ULONG cSurvivingObjectIDRanges,
[in, size_is(cSurvivingObjectIDRanges)] ObjectID
objectIDRangeStart[] ,
[in, size_is(cSurvivingObjectIDRanges)] ULONG
cObjectIDRangeLength[] );
Параметры
cSurvivingObjectIDRanges
[in] Количество блоков непрерывных объектов, оставшихся в результате несжимающей сборки мусора. Таким образом, значение cSurvivingObjectIDRanges является размером массивов objectIDRangeStart и cObjectIDRangeLength, хранящих ObjectID и длину для каждого блока объектов соответственно.Следующие два аргумента SurvivingReferences являются параллельными массивами. Другими словами, objectIDRangeStart и cObjectIDRangeLength подразумевают один и тот же блок непрерывных объектов.
objectIDRangeStart
[in] Массив значений ObjectID, каждое из которых является начальным адресом блока непрерывных активных объектов в памяти.cObjectIDRangeLength
[in] Массив целых чисел, каждое из которых является размером оставшегося блока непрерывных объектов в памяти.Размер, указываемый для каждого блока, ссылка на который имеется в массиве objectIDRangeStart.
Заметки
Элементы массивов objectIDRangeStart и cObjectIDRangeLength должны интерпретироваться для определения уцелевших после сборки мусора объектов следующим образом. Предположим, что значение ObjectID (ObjectID) находится в следующем диапазоне:
ObjectIDRangeStart[i] <= ObjectID < ObjectIDRangeStart[i] + cObjectIDRangeLength[i]
Для любого значения i, находящегося в следующем диапазоне, объект уцелел после сборки мусора.
0 <= i < cSurvivingObjectIDRanges
Несжимающая сборка мусора освобождает память, занятую "мертвыми" объектами, но не сжимает освобожденное пространство. В результате этого память возвращается в кучу, но "живые" объекты не перемещаются.
Среда CLК вызывает SurvivingReferences для выполнения несжимающей сборки мусора. Для выполнения сжимающей сборки мусора вызывается ICorProfilerCallback::MovedReferences. Одиночная сборка мусора может быть сжимающей для одного поколения и несжимающей для другого. Для сборки мусора в каком-либо конкретном поколении профилировщик получит обратный вызов SurvivingReferences или обратный вызов MovedReferences.
Множественные обратные вызовы SurvivingReferences могут быть приняты в ходе определенной сборки мусора из-за ограниченной внутренней буферизации, при предоставлении отчетов множественными потоками при сборке мусора на сервере, а также по другим причинам. В случае м6ножественных обратных вызовов при сборке мусора информация имеет накопительный характер — все ссылки, сообщаемые в любом обратном вызове SurvivingReferences, сохранятся после сборки мусора.
Требования
Платформы: см. раздел Требования к системе для .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
См. также
Ссылки
Интерфейс ICorProfilerCallback
Интерфейс ICorProfilerCallback2