Metodo ICorProfilerCallback4::MovedReferences2
Chiamato per segnalare il nuovo layout degli oggetti nell'heap a seguito di un'operazione di Garbage Collection con compattazione. Questo metodo viene chiamato se il profiler ha implementato l'interfaccia ICorProfilerCallback4 . Questo callback sostituisce il metodo ICorProfilerCallback::MovedReferences , perché può segnalare intervalli più grandi di oggetti le cui lunghezze superano ciò che può essere espresso in una ULONG.
Sintassi
HRESULT MovedReferences2(
[in] ULONG cMovedObjectIDRanges,
[in, size_is(cMovedObjectIDRanges)] ObjectID oldObjectIDRangeStart[] ,
[in, size_is(cMovedObjectIDRanges)] ObjectID newObjectIDRangeStart[] ,
[in, size_is(cMovedObjectIDRanges)] SIZE_T cObjectIDRangeLength[] );
Parametri
cMovedObjectIDRanges
[in] Numero di blocchi di oggetti contigui spostati in seguito all'operazione di Garbage Collection con compattazione. Ciò significa che il valore di cMovedObjectIDRanges
corrisponde alle dimensioni totali delle matrici oldObjectIDRangeStart
, newObjectIDRangeStart
e cObjectIDRangeLength
.
I successivi tre argomenti di MovedReferences2
sono matrici parallele. In altre parole, oldObjectIDRangeStart[i]
, newObjectIDRangeStart[i]
e cObjectIDRangeLength[i]
riguardano un singolo blocco di oggetti contigui.
oldObjectIDRangeStart
[in] Matrice di valori ObjectID
, ognuno dei quali è il vecchio indirizzo iniziale (precedente all'operazione di Garbage Collection) di un blocco di oggetti attivi contigui in memoria.
newObjectIDRangeStart
[in] Matrice di valori ObjectID
, ognuno dei quali è il nuovo indirizzo iniziale (successivo all'operazione di Garbage Collection) di un blocco di oggetti attivi contigui in memoria.
cObjectIDRangeLength
[in] Matrice di Integer, ognuno dei quali corrisponde alle dimensioni di un blocco di oggetti contigui in memoria.
Viene specificata una dimensione per ogni blocco a cui viene fatto riferimento nelle matrici oldObjectIDRangeStart
e newObjectIDRangeStart
.
Commenti
Un Garbage Collector di compattazione recupera la memoria occupata dagli oggetti inutilizzati e compatta lo spazio liberato. Gli oggetti attivi possono quindi essere spostati all'interno dell'heap e i valori di ObjectID
distribuiti dalle notifiche precedenti possono cambiare.
Si supponga che un valore ObjectID
esistente (oldObjectID
) rientri nell'intervallo seguente:
oldObjectIDRangeStart[i]
<= oldObjectID
<oldObjectIDRangeStart[i]
+ cObjectIDRangeLength[i]
In questo caso, l'offset dall'inizio dell'intervallo all'inizio dell'oggetto è il seguente:
oldObjectID
- oldObjectRangeStart[i]
Per qualsiasi valore di i
compreso nell'intervallo seguente:
0 <= i
<cMovedObjectIDRanges
è possibile calcolare il nuovo ObjectID
come segue:
newObjectID
= newObjectIDRangeStart[i]
+ (oldObjectID
– oldObjectIDRangeStart[i]
)
Nessuno dei valori di ObjectID
passati da MovedReferences2
è valido durante il callback vero e proprio, perché è possibile che il Garbage Collector stia ancora spostando gli oggetti dalle vecchie posizioni a quelle nuove. I profiler non devono quindi tentare di verificare gli oggetti durante una chiamata a MovedReferences2
. Un callback ICorProfilerCallback2::GarbageCollectionFinished indica che tutti gli oggetti sono stati spostati nelle nuove posizioni e l'ispezione possono essere eseguiti.
Se il profiler implementa sia il metodo ICorProfilerCallback che le interfacce ICorProfilerCallback4 , il MovedReferences2
metodo viene chiamato prima del metodo ICorProfilerCallback::MovedReferences , ma solo se il MovedReferences2
metodo restituisce correttamente. I profiler possono restituire un valore HRESULT indicante un errore nel metodo MovedReferences2
per evitare di chiamare il secondo metodo.
Requisiti
Piattaforme: vedere Requisiti di sistema di .NET Framework.
Intestazione: CorProf.idl, CorProf.h
Libreria: CorGuids.lib
Versioni di .NET Framework: Disponibile dalla versione 4.5
Vedi anche
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per