ICorProfilerCallback4::SurvivingReferences2-Methode
Meldet das Layout von Objekten im Heap als Folge einer nicht komprimierenden Garbage Collection. Diese Methode wird aufgerufen, wenn der Profiler die ICorProfilerCallback4-Schnittstelle implementiert hat. Dieser Rückruf ersetzt die ICorProfilerCallback2::SurvivingReferences-Methode, weil er größere Bereiche von Objekten melden kann, deren Länge den Wert überschreitet, der in einem ULONG-Typ ausgedrückt werden kann.
Syntax
HRESULT SurvivingReferences2(
[in] ULONG cSurvivingObjectIDRanges,
[in, size_is(cSurvivingObjectIDRanges)] ObjectID
objectIDRangeStart[] ,
[in, size_is(cSurvivingObjectIDRanges)] SIZE_T
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 SurvivingReferences2
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
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 SurvivingReferences2
für nicht komprimierende Garbage Collections auf. Für komprimierende Garbage Collections wird stattdessen MovedReferences2 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 SurvivingReferences2
-Rückruf oder einen MovedReferences2-Rückruf, nicht jedoch beides.
Es werden ggf. mehrere SurvivingReferences2
-Rückrufe während einer bestimmten Garbage Collection aufgrund der eingeschränkten internen Pufferung, mehrerer Rückrufe während der Garbage Collection des Servers oder anderer Gründe empfangen. Wenn mehrere Rückrufe während einer Garbage Collection erfolgen, sind die Informationen kumulativ. Alle Verweise, die in einen SurvivingReferences2
-Rückruf gemeldet werden, werden bei der Garbage Collection beibehalten.
Wenn der Profiler die ICorProfilerCallback- und die ICorProfilerCallback4-Schnittstelle implementiert, wird die SurvivingReferences2
-Methode vor der ICorProfilerCallback2::SurvivingReferences-Methode aufgerufen. Dies geschieht jedoch nur, wenn SurvivingReferences2
erfolgreich zurückgegeben wird. Profiler können ein HRESULT von der Methode SurvivingReferences2
zurückgeben, um zu vermeiden, dass die zweite Methode aufgerufen wird.
Anforderungen
Plattformen: Informationen finden Sie unter Systemanforderungen.
Header: CorProf.idl, CorProf.h
Bibliothek: CorGuids.lib
.NET Framework-Versionen: seit Version 4.5 verfügbar