Sdílet prostřednictvím


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

Viz také