Nota
O acceso a esta páxina require autorización. Pode tentar iniciar sesión ou modificar os directorios.
O acceso a esta páxina require autorización. Pode tentar modificar os directorios.
Se llama para notificar el nuevo diseño de objetos en el montón como resultado de una recolección de elementos no utilizados compactada.
Syntax
HRESULT MovedReferences(
[in] ULONG cMovedObjectIDRanges,
[in, size_is(cMovedObjectIDRanges)] ObjectID oldObjectIDRangeStart[] ,
[in, size_is(cMovedObjectIDRanges)] ObjectID newObjectIDRangeStart[] ,
[in, size_is(cMovedObjectIDRanges)] ULONG cObjectIDRangeLength[] );
Parámetros
cMovedObjectIDRanges [in] Número de bloques de objetos contiguos que se movieron como resultado de la recolección de elementos no utilizados de compactación. Es decir, el valor de cMovedObjectIDRanges es el tamaño total de las oldObjectIDRangeStartmatrices , newObjectIDRangeStarty cObjectIDRangeLength .
Los tres argumentos siguientes de MovedReferences son matrices paralelas. En otras palabras, oldObjectIDRangeStart[i], newObjectIDRangeStart[i]y cObjectIDRangeLength[i] todos se refieren a un único bloque de objetos contiguos.
oldObjectIDRangeStart [in] Matriz de ObjectID valores, cada uno de los cuales es la dirección inicial anterior (recolección previa a elementos no utilizados) de un bloque de objetos dinámicos contiguos en memoria.
newObjectIDRangeStart [in] Matriz de ObjectID valores, cada una de las cuales es la nueva dirección inicial (posterior a la recolección de elementos no utilizados) de un bloque de objetos dinámicos contiguos en memoria.
cObjectIDRangeLength [in] Matriz de enteros, cada uno de los cuales es el tamaño de un bloque de objetos contiguos en memoria.
Se especifica un tamaño para cada bloque al que se hace referencia en las oldObjectIDRangeStart matrices y newObjectIDRangeStart .
Observaciones
Importante
Este método notifica los tamaños de MAX_ULONG los objetos que son mayores de 4 GB en plataformas de 64 bits. Para obtener el tamaño de los objetos que tienen más de 4 GB, use el método ICorProfilerCallback4::MovedReferences2 en su lugar.
Un recolector de elementos no utilizados compacta recupera la memoria ocupada por objetos muertos y compacta ese espacio libre. Como resultado, los objetos dinámicos se pueden mover dentro del montón y ObjectID los valores distribuidos por las notificaciones anteriores podrían cambiar.
Supongamos que un valor existente ObjectID (oldObjectID) se encuentra dentro del intervalo siguiente:
oldObjectIDRangeStart[i]
<= oldObjectID<oldObjectIDRangeStart[i] + cObjectIDRangeLength[i]
En este caso, el desplazamiento desde el principio del intervalo hasta el inicio del objeto es el siguiente:
oldObjectID - oldObjectRangeStart[i]
Para cualquier valor de i que se encuentra en el intervalo siguiente:
0 <= i<cMovedObjectIDRanges
Puede calcular el nuevo ObjectID de la siguiente manera:
newObjectID
=
newObjectIDRangeStart[i] + (oldObjectID - oldObjectIDRangeStart[i])
Ninguno de los ObjectID valores pasados por MovedReferences son válidos durante la propia devolución de llamada, ya que la recolección de elementos no utilizados podría estar en medio de mover objetos de ubicaciones antiguas a nuevas ubicaciones. Por lo tanto, los generadores de perfiles no deben intentar inspeccionar objetos durante una MovedReferences llamada. Una devolución de llamada ICorProfilerCallback2::GarbageCollectionFinished indica que todos los objetos se han movido a sus nuevas ubicaciones y se puede realizar la inspección.
Requisitos
Plataformas: Consulte Requisitos del sistema.
Encabezado: CorProf.idl, CorProf.h
Biblioteca: CorGuids.lib
Versiones de .NET Framework: Disponible desde la versión 2.0