Freigeben über


ICorProfilerCallback4::MovedReferences2-Methode

Wird aufgerufen, um das neue Layout von Objekten im Heap als Folge einer komprimierenden Garbage Collection zu melden. Diese Methode wird aufgerufen, wenn der Profiler die ICorProfilerCallback4-Schnittstelle implementiert hat. Dieser Rückruf ersetzt die ICorProfilerCallback::MovedReferences-Methode, weil er größere Bereiche von Objekten melden kann, deren Länge den Wert überschreitet, der in einem ULONG-Typ ausgedrückt werden kann.

Syntax

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

Parameter

cMovedObjectIDRanges
[in] Die Anzahl der Blöcke zusammenhängender Objekte, die als Folge der komprimierenden Garbage Collection verschoben wurden. Das heißt, der Wert von cMovedObjectIDRanges entspricht der Gesamtgröße der Arrays oldObjectIDRangeStart, newObjectIDRangeStart und cObjectIDRangeLength.

Die nächsten drei Argumente von MovedReferences2 sind parallele Arrays. Mit anderen Worten, oldObjectIDRangeStart[i], newObjectIDRangeStart[i] und cObjectIDRangeLength[i] betreffen alle einen einzelnen Block zusammenhängender Objekte.

oldObjectIDRangeStart
[in] Ein Array von ObjectID-Werten, von denen jeder die alte (vor der Garbage Collection vorhandene) Startadresse eines Blocks zusammenhängender aktiver Objekte im Arbeitsspeicher darstellt.

newObjectIDRangeStart
[in] Ein Array von ObjectID-Werten, von denen jeder die neue (nach der Garbage Collection vorhandene) Startadresse eines Blocks zusammenhängender aktiver Objekte im Arbeitsspeicher darstellt.

cObjectIDRangeLength
[in] Ein Array von Ganzzahlen, von denen jede die Größe eines Blocks zusammenhängender Objekte im Arbeitsspeicher darstellt.

Es wird eine Größe für jeden Block angegeben, auf den im oldObjectIDRangeStart-Array und im newObjectIDRangeStart-Array verwiesen wird.

Bemerkungen

Ein komprimierender Garbage Collector gibt den von inaktiven Objekten belegten Arbeitsspeicher frei und komprimiert diesen freigegebenen Speicherplatz. Folglich könnten aktive Objekte innerhalb des Heaps verschoben werden, und ObjectID-Werte, die von vorherigen Benachrichtigungen verteilt wurden, könnten sich möglicherweise ändern.

Angenommen, ein vorhandener ObjectID-Wert (oldObjectID) liegt innerhalb des folgenden Bereichs:

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

In diesem Fall ist der Offset vom Anfang des Bereichs bis zum Anfang des Objekts wie folgt:

oldObjectID - oldObjectRangeStart[i]

Für jeden Wert von i, der im folgenden Bereich liegt:

0 <= i<cMovedObjectIDRanges

können Sie die neue ObjectID wie folgt berechnen:

newObjectID = newObjectIDRangeStart[i] + (oldObjectIDoldObjectIDRangeStart[i])

Keiner der ObjectID-Werte, die von MovedReferences2 übergeben wurden, ist während des Rückrufs selbst gültig, weil der Garbage Collector zu diesem Zeitpunkt möglicherweise noch Objekte von alten Speicherorten an neue Speicherorte verschiebt. Deshalb sollten Profiler nicht versuchen, Objekte während eines MovedReferences2-Aufrufs zu überprüfen. Ein ICorProfilerCallback2::GarbageCollectionFinished-Rückruf gibt an, dass alle Objekte an die neuen Speicherorte verschoben wurden und die Überprüfung ausgeführt werden kann.

Wenn der Profiler die ICorProfilerCallback- und die ICorProfilerCallback4-Schnittstelle implementiert, wird die MovedReferences2-Methode vor der ICorProfilerCallback::MovedReferences-Methode aufgerufen. Dies geschieht jedoch nur, wenn die MovedReferences2-Methode erfolgreich zurückgegeben wird. Profiler können ein HRESULT von der Methode MovedReferences2 zurückgeben, um zu vermeiden, dass die zweite Methode aufgerufen wird.

Anforderungen

Plattformen: Informationen finden Sie unter Systemanforderungen.

Header: CorProf.idl, CorProf.h

Bibliothek: CorGuids.lib

.NET Framework-Versionen: seit Version 4.5 verfügbar

Weitere Informationen