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


Метод 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

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

Отслеживание объектов в интерфейсе API для профилирования