Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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