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.

Siehe auch