ICorProfilerCallback::MovedReferences – metoda

Volá se k hlášení nového rozložení objektů v haldě v důsledku komprimace uvolňování paměti.

Syntaxe

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

Parametry

cMovedObjectIDRanges [v] Počet bloků souvislých objektů, které se přesunuly jako výsledek komprimace uvolňování paměti. To znamená, že hodnota cMovedObjectIDRanges je celková velikost oldObjectIDRangeStart, newObjectIDRangeStarta cObjectIDRangeLength pole.

Další tři argumenty MovedReferences jsou paralelní pole. Jinými slovy , oldObjectIDRangeStart[i]a newObjectIDRangeStart[i]cObjectIDRangeLength[i] všechny se týkají jediného bloku souvislých objektů.

oldObjectIDRangeStart [v] Pole ObjectID hodnot, z nichž každá je stará (před uvolňováním paměti) počáteční adresa bloku souvislých živých objektů v paměti.

newObjectIDRangeStart [v] ObjectID Pole hodnot, z nichž každý je novou počáteční adresou (po uvolnění paměti) bloku souvislých živých objektů v paměti.

cObjectIDRangeLength [v] Pole celých čísel, z nichž každá je velikost bloku souvislých objektů v paměti.

Pro každý blok, na který se odkazuje v oldObjectIDRangeStartnewObjectIDRangeStart polích, je zadána velikost.

Poznámky

Důležité

Tato metoda hlásí velikosti MAX_ULONG objektů větších než 4 GB na 64bitových platformách. Chcete-li získat velikost objektů větší než 4 GB, použijte místo toho ICorProfilerCallback4::MovedReferences2 metoda.

Komprimace uvolňování paměti uvolní paměť obsazenou mrtvými objekty a komprimuje, které uvolnilo místo. V důsledku toho se živé objekty můžou přesunout v haldě a ObjectID hodnoty distribuované předchozími oznámeními se můžou změnit.

Předpokládejme, že existující ObjectID hodnota (oldObjectID) leží v následujícím rozsahu:

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

V tomto případě je posun od začátku oblasti na začátek objektu následující:

oldObjectID - oldObjectRangeStart[i]

Pro libovolnou hodnotu i , která je v následujícím rozsahu:

0 <= i<cMovedObjectIDRanges

Nové ObjectID můžete vypočítat následujícím způsobem:

newObjectID = newObjectIDRangeStart[i] + (oldObjectID - oldObjectIDRangeStart[i])

Během samotného zpětného volání nejsou platné žádné hodnoty ObjectIDMovedReferences , protože uvolňování paměti může být uprostřed přesouvání objektů ze starých umístění do nových umístění. Proto by se profilátoři neměli pokoušet kontrolovat objekty během MovedReferences volání. ICorProfilerCallback2::GarbageCollectionFinished zpětné volání označuje, že všechny objekty byly přesunuty do jejich nových umístění a kontrola lze provést.

Požadavky

Platformy: Viz požadavky na systém.

Záhlaví: CorProf.idl, CorProf.h

Knihovna: CorGuids.lib

Verze rozhraní .NET Framework: K dispozici od verze 2.0

Viz také