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é
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro