ICorProfilerCallback2::SurvivingReferences-Methode
Meldet das Layout von Objekten im Heap als Folge einer nicht komprimierenden Garbage Collection.
Syntax
HRESULT SurvivingReferences(
[in] ULONG cSurvivingObjectIDRanges,
[in, size_is(cSurvivingObjectIDRanges)] ObjectID
objectIDRangeStart[] ,
[in, size_is(cSurvivingObjectIDRanges)] ULONG
cObjectIDRangeLength[] );
Parameter
cSurvivingObjectIDRanges
[in] Die Anzahl der Blöcke zusammenhängender Objekte, die als Folge der nicht komprimierenden Garbage Collection beibehalten wurden. Dies bedeutet, dass der Wert von cSurvivingObjectIDRanges
die Größe der Arrays objectIDRangeStart
und cObjectIDRangeLength
, die eine ObjectID
bzw. eine Länge speichern, für jeden Objektblock darstellt.
Die nächsten zwei Argumente von SurvivingReferences
sind parallele Arrays. objectIDRangeStart
und cObjectIDRangeLength
betreffen also alle den gleichen Block zusammenhängender Objekte.
objectIDRangeStart
[in] Ein Array von ObjectID
-Werten, von denen jeder die Startadresse eines Blocks zusammenhängender aktiver Objekte im Arbeitsspeicher darstellt.
cObjectIDRangeLength
[in] Ein Array von Ganzzahlen, von denen jede die Größe eines beibehaltenen Blocks zusammenhängender Objekte im Arbeitsspeicher darstellt.
Es wird eine Größe für jeden Block angegeben, auf den im objectIDRangeStart
-Array verwiesen wird.
Bemerkungen
Wichtig
Mit dieser Methode werden auf 64-Bit-Plattformen Größen für Objekte, die größer als 4 GB sind, als MAX_ULONG
gemeldet. Verwenden Sie für Objekte, die größer als 4 GB sind, stattdessen die ICorProfilerCallback4::SurvivingReferences2-Methode.
Die Elemente der objectIDRangeStart
- und cObjectIDRangeLength
-Arrays sollten wie folgt interpretiert werden, um festzustellen, ob ein Objekt bei der Garbage Collection beibehalten wurde. Angenommen, ein ObjectID
-Wert (ObjectID
) liegt innerhalb des folgenden Bereichs:
ObjectIDRangeStart[i]
<= ObjectID
<ObjectIDRangeStart[i]
+ cObjectIDRangeLength[i]
Für jeden Wert von i
im folgenden Bereich wurde das Objekt bei der Garbage Collection beibehalten:
0 <= i
<cSurvivingObjectIDRanges
Eine nicht komprimierende Garbage Collection gibt den von "inaktiven" Objekten belegten Arbeitsspeicher frei, komprimiert diesen freigegebenen Speicherplatz jedoch nicht. Als Ergebnis wird Arbeitsspeicher an den Heap zurückgegeben, es werden jedoch keine "aktiven" Objekte verschoben.
Die CLR (Common Language Runtime) ruft SurvivingReferences
für nicht komprimierende Garbage Collections auf. Für komprimierende Garbage Collections wird stattdessen ICorProfilerCallback::MovedReferences aufgerufen. Eine einzelne Garbage Collection kann für eine Generation komprimierend und für eine andere nicht komprimierend sein. Für eine Garbage Collection einer bestimmten Generation empfängt der Profiler einen SurvivingReferences
-Rückruf oder einen MovedReferences
-Rückruf, nicht jedoch beides.
Es werden ggf. mehrere SurvivingReferences
-Rückrufe während einer bestimmten Garbage Collection aufgrund der eingeschränkten internen Pufferung, mehrerer Threads, die bei der Garbage Collection des Servers gemeldet werden, oder anderer Gründe empfangen. Wenn mehrere Rückrufe während einer Garbage Collection erfolgen, sind die Informationen kumulativ. Alle Verweise, die in einen SurvivingReferences
-Rückruf gemeldet werden, werden bei der Garbage Collection beibehalten.
Anforderungen
Plattformen: Informationen finden Sie unter Systemanforderungen.
Header: CorProf.idl, CorProf.h
Bibliothek: CorGuids.lib
.NET Framework-Versionen: Seit 2.0 verfügbar.