Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Предоставляет информацию о структуре объектов в куче в результате сборки мусора без сжатия. Этот метод вызывается, если профилировщик реализовал интерфейс ICorProfilerCallback4 . Этот обратный вызов заменяет метод ICorProfilerCallback2::SurvivingReferences , так как он может сообщать о больших диапазонах объектов, длина которых превышает то, что может быть выражено в ULONG.
Синтаксис
HRESULT SurvivingReferences2(
[in] ULONG cSurvivingObjectIDRanges,
[in, size_is(cSurvivingObjectIDRanges)] ObjectID
objectIDRangeStart[] ,
[in, size_is(cSurvivingObjectIDRanges)] SIZE_T
cObjectIDRangeLength[] );
Параметры
cSurvivingObjectIDRanges
[in] Количество блоков смежных объектов, оставшихся в результате сборки мусора без сжатия. То есть значение cSurvivingObjectIDRanges является размером массивов objectIDRangeStart и cObjectIDRangeLength, в которых хранятся идентификаторы ObjectID и длины каждого блока объектов соответственно.
Следующие два аргумента SurvivingReferences2 являются параллельными массивами. Иными словами, objectIDRangeStart и cObjectIDRangeLength относятся к одному и тому же блоку смежных объектов.
objectIDRangeStart
[in] Массив значений ObjectID, каждое из которых является начальным адресом блока смежных активных объектов в памяти.
cObjectIDRangeLength
[in] Массив целых чисел, каждое из которых представляет размер оставшегося блока смежных объектов в памяти.
Размер указывается для каждого блока, ссылка на который имеется в массиве objectIDRangeStart.
Комментарии
Для определения того, уцелел ли объект после сборки мусора, элементы массивов objectIDRangeStart и cObjectIDRangeLength должны интерпретироваться следующим образом. Предположим, что значение ObjectID (ObjectID) находится в следующем диапазоне:
ObjectIDRangeStart[i]
<= ObjectID<ObjectIDRangeStart[i] + cObjectIDRangeLength[i]
При любом значении i, находящемся в указанном ниже диапазоне, объект уцелел после сборки мусора.
0 <= i<cSurvivingObjectIDRanges
Сборка мусора без сжатия освобождает память, занятую "мертвыми" объектами, но не сжимает освобожденное пространство. В результате этого память возвращается в кучу, но активные объекты не перемещаются.
Среда CLR вызывает метод SurvivingReferences2 для выполнения сборки мусора без сжатия. Для сжатия сборок мусора вызывается метод MovedReferences2 . Отдельная операция сборки мусора может предусматривать сжатие для одного поколения и не предусматривать — для другого. Для сборки мусора в любом конкретном поколении профилировщик получит обратный SurvivingReferences2 вызов или обратный вызов MovedReferences2 , но не оба.
Несколько обратных вызовов SurvivingReferences2 может быть получено в ходе определенной сборки мусора из-за ограниченной внутренней буферизации, нескольких обратных вызовов во время сборки мусора на сервере и по другим причинам. При получении нескольких обратных вызовов во время сборки мусора информация накапливается — все ссылки, сообщаемые в обратных вызовах SurvivingReferences2, сохранятся после сборки мусора.
Если профилировщик реализует интерфейсы ICorProfilerCallback и ICorProfilerCallback4 , SurvivingReferences2 метод вызывается перед методом ICorProfilerCallback2::SurvivingReferences , но только в случае SurvivingReferences2 успешного возврата. Профилировщики могут возвращать значение HRESULT, указывающее на сбой метода SurvivingReferences2, что позволяет избежать вызова второго метода.
Требования
Платформы: см. раздел Требования к системе.
Заголовок: CorProf.idl, CorProf.h
Библиотека: CorGuids.lib
версии платформа .NET Framework: доступно с версии 4.5