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