Sdílet prostřednictvím


ICorProfilerCallback4::SurvivingReferences2 – metoda

Hlásí rozložení objektů v haldě v důsledku nekomprimace uvolňování paměti. Tato metoda je volána, pokud profiler implementoval ICorProfilerCallback4 rozhraní. Toto zpětné volání nahrazuje ICorProfilerCallback2::SurvivingReferences metoda, protože může hlásit větší rozsahy objektů, jejichž délky překračují to, co lze vyjádřit v ULONG.

Syntaxe

HRESULT SurvivingReferences2(  
    [in] ULONG  cSurvivingObjectIDRanges,  
    [in, size_is(cSurvivingObjectIDRanges)] ObjectID  
                objectIDRangeStart[] ,  
    [in, size_is(cSurvivingObjectIDRanges)] SIZE_T  
                cObjectIDRangeLength[] );  

Parametry

cSurvivingObjectIDRanges
[v] Počet bloků souvislých objektů, které přežily v důsledku nekomprimace uvolňování paměti. To znamená, že hodnota cSurvivingObjectIDRanges je velikost objectIDRangeStart polí a cObjectIDRangeLength , které ukládají hodnotu ObjectID a délku pro každý blok objektů.

Další dva argumenty jsou SurvivingReferences2 paralelní pole. Jinými slovy, objectIDRangeStart a cObjectIDRangeLength týkají se stejného bloku souvislých objektů.

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

cObjectIDRangeLength
[v] Pole celých čísel, z nichž každé představuje velikost přechozího bloku souvislých objektů v paměti.

Pro každý blok, na který se odkazuje v matici, je zadána objectIDRangeStart velikost.

Poznámky

Prvky objectIDRangeStart polí a cObjectIDRangeLength by měly být interpretovány následujícím způsobem, aby bylo možné určit, zda objekt přežil uvolňování paměti. Předpokládejme, že ObjectID hodnota (ObjectID) leží v následujícím rozsahu:

ObjectIDRangeStart[i]<= ObjectID<ObjectIDRangeStart[i] + cObjectIDRangeLength[i]

Pro libovolnou i hodnotu, která je v následujícím rozsahu, objekt přežil uvolňování paměti:

0 <= i<cSurvivingObjectIDRanges

Nekomprimující uvolňování paměti uvolní paměť zabíranou "mrtvými" objekty, ale nezkomprimuje uvolněné místo. V důsledku toho se do haldy vrátí paměť, ale nepřesouvají se žádné živé objekty.

Modul CLR (Common Language Runtime) volá SurvivingReferences2 nekomprimace uvolňování paměti. Pro komprimování uvolňování paměti se místo toho volá MovedReferences2 . Jedno uvolňování paměti může být komprimační pro jednu generaci a nekomprimuje pro jinou. V případě uvolňování paměti v konkrétní generaci profiler obdrží zpětné SurvivingReferences2 volání nebo zpětné volání MovedReferences2 , ale ne obojí.

Během konkrétního uvolňování paměti může být přijato více SurvivingReferences2 zpětných volání kvůli omezenému ukládání do vyrovnávací paměti, několika zpětným voláním během uvolňování paměti serveru a dalším důvodům. V případě více zpětných volání během uvolňování paměti, informace jsou kumulativní; Všechny odkazy, které jsou hlášeny v jakémkoli SurvivingReferences2 zpětném volání, přetrvají uvolňování paměti.

Pokud profiler implementuje ICorProfilerCallback a ICorProfilerCallback4 rozhraní, SurvivingReferences2 metoda je volána před ICorProfilerCallback2::SurvivingReferences metoda, ale pouze pokud SurvivingReferences2 vrátí úspěšně. Profilátory můžou vrátit hodnotu HRESULT, která indikuje selhání metody SurvivingReferences2 , aby se zabránilo volání druhé metody.

Požadavky

Platformy: Viz Požadavky na systém.

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

Knihovny: CorGuids.lib

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

Viz také