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


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

Комментарии

Важно!

Этот метод сообщает размеры как MAX_ULONG для объектов с размером более 4 Гб на 64-разрядных платформах. Для объектов размером более 4 ГБ используйте метод ICorProfilerCallback4::SurvivingReferences2 .

Для определения того, уцелел ли объект после сборки мусора, элементы массивов objectIDRangeStart и cObjectIDRangeLength должны интерпретироваться следующим образом. Предположим, что значение ObjectID (ObjectID) находится в следующем диапазоне:

ObjectIDRangeStart[i]<= ObjectID<ObjectIDRangeStart[i] + cObjectIDRangeLength[i]

При любом значении i, находящемся в указанном ниже диапазоне, объект уцелел после сборки мусора.

0 <= i<cSurvivingObjectIDRanges

Сборка мусора без сжатия освобождает память, занятую "мертвыми" объектами, но не сжимает освобожденное пространство. В результате этого память возвращается в кучу, но активные объекты не перемещаются.

Среда CLR вызывает метод SurvivingReferences для выполнения сборки мусора без сжатия. Для сжатия сборок мусора вызывается ICorProfilerCallback::MovedReferences . Отдельная операция сборки мусора может предусматривать сжатие для одного поколения и не предусматривать — для другого. Для сборки мусора в каком-либо конкретном поколении профилировщик получит либо обратный вызов SurvivingReferences, либо обратный вызов MovedReferences (но не оба вызова).

Несколько обратных вызовов SurvivingReferences может быть получено в ходе определенной сборки мусора из-за ограниченной внутренней буферизации, нескольких потоков отчетов в случае сборки мусора на сервере и по другим причинам. При получении нескольких обратных вызовов во время сборки мусора информация накапливается — все ссылки, сообщаемые в обратных вызовах SurvivingReferences, сохранятся после сборки мусора.

Требования

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

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

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

версии платформа .NET Framework: доступно с версии 2.0

См. также раздел