ICorProfilerCallback2::SurvivingReferences – metoda
Hlásí rozložení objektů v haldě v důsledku nekomprimace uvolňování paměti.
Syntaxe
HRESULT SurvivingReferences(
[in] ULONG cSurvivingObjectIDRanges,
[in, size_is(cSurvivingObjectIDRanges)] ObjectID
objectIDRangeStart[] ,
[in, size_is(cSurvivingObjectIDRanges)] ULONG
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 SurvivingReferences
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
Důležité
Tato metoda hlásí velikosti objektů MAX_ULONG
, které jsou větší než 4 GB na 64bitových platformách. Pro objekty, které jsou větší než 4 GB, použijte ICorProfilerCallback4::SurvivingReferences2 místo metody.
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á SurvivingReferences
nekomprimace uvolňování paměti. Pro komprimování uvolňování paměti je místo toho volán ICorProfilerCallback::MovedReferences . 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 obdrží profiler buď SurvivingReferences
zpětné volání, nebo MovedReferences
zpětné volání, ale ne obojí.
Během konkrétního uvolňování paměti může být přijato více SurvivingReferences
zpětných volání, a to kvůli omezenému internímu ukládání do vyrovnávací paměti, hlášení více vláken v případě 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 jsou informace kumulativní – všechny odkazy, které jsou hlášeny v libovolném SurvivingReferences
zpětném volání, přetrvají uvolňování paměti.
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 2.0