Freigeben über


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

Siehe auch