Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Wird aufgerufen, um das neue Layout von Objekten im Heap als Ergebnis einer komprimierenden Garbage Collection zu melden.
Syntax
HRESULT MovedReferences(
[in] ULONG cMovedObjectIDRanges,
[in, size_is(cMovedObjectIDRanges)] ObjectID oldObjectIDRangeStart[] ,
[in, size_is(cMovedObjectIDRanges)] ObjectID newObjectIDRangeStart[] ,
[in, size_is(cMovedObjectIDRanges)] ULONG cObjectIDRangeLength[] );
Die Parameter
cMovedObjectIDRanges [in] Die Anzahl der Blöcke zusammenhängender Objekte, die als Ergebnis der Komprimierung der Garbage Collection verschoben wurden. Das heißt, der Wert cMovedObjectIDRanges ist die Gesamtgröße der Arrays newObjectIDRangeStartund cObjectIDRangeLength des oldObjectIDRangeStartArrays.
Die nächsten drei Argumente MovedReferences sind parallele Arrays. Mit anderen Worten, oldObjectIDRangeStart[i], newObjectIDRangeStart[i]und cObjectIDRangeLength[i] alle betreffen einen einzelnen Block zusammenhängender Objekte.
oldObjectIDRangeStart [in] Ein Array von ObjectID Werten, von denen jede die alte (pre-garbage collection) Startadresse eines Blocks zusammenhängender Liveobjekte im Speicher ist.
newObjectIDRangeStart [in] Ein Array von ObjectID Werten, von denen jede die neue (Post Garbage Collection) Startadresse eines Blocks zusammenhängender Liveobjekte im Speicher ist.
cObjectIDRangeLength [in] Ein Array von ganzzahligen Zahlen, von denen jede die Größe eines Blocks zusammenhängender Objekte im Speicher ist.
Für jeden Block, auf den in den oldObjectIDRangeStart Arrays newObjectIDRangeStart verwiesen wird, wird eine Größe angegeben.
Bemerkungen
Von Bedeutung
Diese Methode meldet Größen für MAX_ULONG Objekte, die größer als 4 GB auf 64-Bit-Plattformen sind. Verwenden Sie stattdessen die ICorProfilerCallback4::MovedReferences2-Methode , um die Größe von Objekten abzurufen, die größer als 4 GB sind.
Ein komprimierender Garbage Collector gibt den Speicher frei, der von toten Objekten belegt wird, und komprimiert den Speicherplatz. Daher können Liveobjekte innerhalb des Heaps verschoben werden, und ObjectID die von vorherigen Benachrichtigungen verteilten Werte können sich ändern.
Gehen Sie davon aus, dass sich ein vorhandener ObjectID Wert (oldObjectID) innerhalb des folgenden Bereichs befindet:
oldObjectIDRangeStart[i]
<= oldObjectID<oldObjectIDRangeStart[i] + cObjectIDRangeLength[i]
In diesem Fall lautet der Offset vom Anfang des Bereichs bis zum Anfang des Objekts wie folgt:
oldObjectID - oldObjectRangeStart[i]
Für jeden Wert, der i sich im folgenden Bereich befindet:
0 <= i<cMovedObjectIDRanges
Sie können das neue ObjectID wie folgt berechnen:
newObjectID
=
newObjectIDRangeStart[i] + (oldObjectID - oldObjectIDRangeStart[i])
Während des Rückrufs sind keine der ObjectID übergebenen MovedReferences Werte gültig, da sich die Garbage Collection möglicherweise in der Mitte des Verschiebens von Objekten von alten Speicherorten zu neuen Speicherorten befindet. Daher sollten Profiler nicht versuchen, Objekte während eines MovedReferences Aufrufs zu prüfen. Ein ICorProfilerCallback2::GarbageCollectionFinished-Rückruf gibt an, dass alle Objekte an ihre neuen Speicherorte verschoben wurden und die Überprüfung ausgeführt werden kann.
Anforderungen
Plattformen: Informationen finden Sie unter Systemanforderungen.
Kopfball: CorProf.idl, CorProf.h
Bibliothek: CorGuids.lib
.NET Framework-Versionen: Verfügbar seit 2.0