Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Вызывается для отчета о новом макете объектов в куче в результате сжатия сборки мусора.
Синтаксис
HRESULT MovedReferences(
[in] ULONG cMovedObjectIDRanges,
[in, size_is(cMovedObjectIDRanges)] ObjectID oldObjectIDRangeStart[] ,
[in, size_is(cMovedObjectIDRanges)] ObjectID newObjectIDRangeStart[] ,
[in, size_is(cMovedObjectIDRanges)] ULONG cObjectIDRangeLength[] );
Параметры
cMovedObjectIDRanges [in] Количество блоков смежных объектов, перемещаемых в результате сжатия сборки мусора. То есть значение равно общему размеру cMovedObjectIDRangesoldObjectIDRangeStartnewObjectIDRangeStartмассивов, а cObjectIDRangeLength также массивам.
Следующие три аргумента MovedReferences являются параллельными массивами. Другими словами, oldObjectIDRangeStart[i]newObjectIDRangeStart[i]и cObjectIDRangeLength[i] все касаются одного блока смежных объектов.
oldObjectIDRangeStart [in] Массив значений ObjectID , каждый из которых является старым (предварительной сборкой мусора), начальным адресом блока смежных динамических объектов в памяти.
newObjectIDRangeStart [in] Массив значений, каждый из которых является новым (после сборки мусора) начальным адресом блока смежных ObjectID динамических объектов в памяти.
cObjectIDRangeLength [in] Массив целых чисел, каждый из которых является размером блока смежных объектов в памяти.
Размер указывается для каждого блока, на который ссылается ссылка в oldObjectIDRangeStart массивах и newObjectIDRangeStart массивах.
Замечания
Это важно
Этот метод сообщает о размерах MAX_ULONG объектов, превышающих 4 ГБ на 64-разрядных платформах. Чтобы получить размер объектов размером более 4 ГБ, используйте вместо этого метод ICorProfilerCallback4::MovedReferences2 .
Сжатие сборщика мусора освобождает память, занятую мертвыми объектами и сжимает свободное пространство. В результате динамические объекты могут быть перемещены в кучу, а ObjectID значения, распределенные предыдущими уведомлениями, могут измениться.
Предположим, что существующее ObjectID значение (oldObjectID) находится в следующем диапазоне:
oldObjectIDRangeStart[i]
<= oldObjectID<oldObjectIDRangeStart[i] + cObjectIDRangeLength[i]
В этом случае смещение от начала диапазона до начала объекта выглядит следующим образом:
oldObjectID - oldObjectRangeStart[i]
Для любого значения этого значения i находится в следующем диапазоне:
0 <= i<cMovedObjectIDRanges
Вы можете вычислить новое ObjectID следующим образом:
newObjectID
=
newObjectIDRangeStart[i] + (oldObjectID - oldObjectIDRangeStart[i])
Ни один из ObjectID переданных значений MovedReferences не является допустимым во время обратного вызова, так как сборка мусора может находиться в середине перемещения объектов из старых расположений в новые расположения. Поэтому профилировщики не должны пытаться проверять объекты во время MovedReferences вызова. Обратный вызов ICorProfilerCallback2::GarbageCollectionFinished указывает, что все объекты были перемещены в новые расположения и можно выполнить проверку.
Требования
Платформы: см. раздел Требования к системе.
Заголовок: CorProf.idl, CorProf.h
Библиотека: CorGuids.lib
Версии .NET Framework: Доступно с версии 2.0