Metodo ICorProfilerCallback4::MovedReferences2ICorProfilerCallback4::MovedReferences2 Method

Chiamato per segnalare il nuovo layout degli oggetti nell'heap a seguito di un'operazione di Garbage Collection con compattazione.Called to report the new layout of objects in the heap as a result of a compacting garbage collection. Questo metodo viene chiamato se il profiler ha implementato il ICorProfilerCallback4 interfaccia.This method is called if the profiler has implemented the ICorProfilerCallback4 interface. Questo callback sostituisce il ICorProfilerCallback:: MovedReferences metodo, perché può indicare intervalli più ampi di oggetti le cui lunghezze superano quelle che possono essere espresse in ULONG.This callback replaces the ICorProfilerCallback::MovedReferences method, because it can report larger ranges of objects whose lengths exceed what can be expressed in a ULONG.

SintassiSyntax

HRESULT MovedReferences2(  
    [in]  ULONG  cMovedObjectIDRanges,  
    [in, size_is(cMovedObjectIDRanges)] ObjectID oldObjectIDRangeStart[] ,  
    [in, size_is(cMovedObjectIDRanges)] ObjectID newObjectIDRangeStart[] ,  
    [in, size_is(cMovedObjectIDRanges)] SIZE_T    cObjectIDRangeLength[] );  

ParametriParameters

cMovedObjectIDRanges
[in] Numero di blocchi di oggetti contigui spostati in seguito all'operazione di Garbage Collection con compattazione.[in] The number of blocks of contiguous objects that moved as the result of the compacting garbage collection. Ciò significa che il valore di cMovedObjectIDRanges corrisponde alle dimensioni totali delle matrici oldObjectIDRangeStart, newObjectIDRangeStart e cObjectIDRangeLength.That is, the value of cMovedObjectIDRanges is the total size of the oldObjectIDRangeStart, newObjectIDRangeStart, and cObjectIDRangeLength arrays.

I successivi tre argomenti di MovedReferences2 sono matrici parallele.The next three arguments of MovedReferences2 are parallel arrays. In altre parole, oldObjectIDRangeStart[i], newObjectIDRangeStart[i] e cObjectIDRangeLength[i] riguardano un singolo blocco di oggetti contigui.In other words, oldObjectIDRangeStart[i], newObjectIDRangeStart[i], and cObjectIDRangeLength[i] all concern a single block of contiguous objects.

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.[in] An array of ObjectID values, each of which is the old (pre-garbage collection) starting address of a block of contiguous, live objects in memory.

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.[in] An array of ObjectID values, each of which is the new (post-garbage collection) starting address of a block of contiguous, live objects in memory.

cObjectIDRangeLength
[in] Matrice di Integer, ognuno dei quali corrisponde alle dimensioni di un blocco di oggetti contigui in memoria.[in] An array of integers, each of which is the size of a block of contiguous objects in memory.

Viene specificata una dimensione per ogni blocco a cui viene fatto riferimento nelle matrici oldObjectIDRangeStart e newObjectIDRangeStart.A size is specified for each block that is referenced in the oldObjectIDRangeStart and newObjectIDRangeStart arrays.

NoteRemarks

Un Garbage Collector di compattazione recupera la memoria occupata dagli oggetti inutilizzati e compatta lo spazio liberato.A compacting garbage collector reclaims the memory occupied by dead objects and compacts that freed space. Gli oggetti attivi possono quindi essere spostati all'interno dell'heap e i valori di ObjectID distribuiti dalle notifiche precedenti possono cambiare.As a result, live objects might be moved within the heap, and ObjectID values distributed by previous notifications might change.

Si supponga che un valore ObjectID esistente (oldObjectID) rientri nell'intervallo seguente:Assume that an existing ObjectID value (oldObjectID) lies within the following range:

oldObjectIDRangeStart[i] <= oldObjectID < oldObjectIDRangeStart[i] + cObjectIDRangeLength[i]

In questo caso, l'offset dall'inizio dell'intervallo all'inizio dell'oggetto è il seguente:In this case, the offset from the start of the range to the start of the object is as follows:

oldObjectID - oldObjectRangeStart[i]

Per qualsiasi valore di i compreso nell'intervallo seguente:For any value of i that is in the following range:

0 <= i < cMovedObjectIDRanges0 <= i < cMovedObjectIDRanges

è possibile calcolare il nuovo ObjectID come segue:you can calculate the new ObjectID as follows:

newObjectID = newObjectIDRangeStart[i] + (oldObjectIDoldObjectIDRangeStart[i])newObjectID = newObjectIDRangeStart[i] + (oldObjectIDoldObjectIDRangeStart[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.None of the ObjectID values passed by MovedReferences2 are valid during the callback itself, because the garbage collector might be in the middle of moving objects from old locations to new locations. I profiler non devono quindi tentare di verificare gli oggetti durante una chiamata a MovedReferences2.Therefore, profilers should not attempt to inspect objects during a MovedReferences2 call. Oggetto ICorProfilerCallback2:: GarbageCollectionFinished callback indica che tutti gli oggetti sono stati spostati nelle nuove posizioni e possa eseguire l'ispezione.A ICorProfilerCallback2::GarbageCollectionFinished callback indicates that all objects have been moved to their new locations and inspection can be performed.

Se il profiler implementa sia il ICorProfilerCallback e ICorProfilerCallback4 interfacce, la MovedReferences2 metodo viene chiamato prima di ICorProfilerCallback:: MovedReferences (metodo), ma solo se il MovedReferences2 metodo ha esito positivo.If the profiler implements both the ICorProfilerCallback and the ICorProfilerCallback4 interfaces, the MovedReferences2 method is called before the ICorProfilerCallback::MovedReferences method, but only if the MovedReferences2 method returns successfully. I profiler possono restituire un valore HRESULT indicante un errore nel metodo MovedReferences2 per evitare di chiamare il secondo metodo.Profilers can return an HRESULT that indicates failure from the MovedReferences2 method, to avoid calling the second method.

RequisitiRequirements

Piattaforme: vedere requisiti di sistema.Platforms: See System Requirements.

Intestazione: CorProf.idl, CorProf.hHeader: CorProf.idl, CorProf.h

Libreria: CorGuids. libLibrary: CorGuids.lib

Versioni di .NET framework: Disponibile dalla 4.5Available since 4.5.NET Framework Versions: Disponibile dalla 4.5Available since 4.5

Vedere ancheSee Also

Interfaccia ICorProfilerCallbackICorProfilerCallback Interface
Metodo MovedReferencesMovedReferences Method
Interfaccia ICorProfilerCallback4ICorProfilerCallback4 Interface
Interfacce di profilaturaProfiling Interfaces
ProfilaturaProfiling