Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Предоставляет информацию о структуре объектов в куче в результате сборки мусора без сжатия.
Синтаксис
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