Freigeben über


ICorProfilerCallback2::SurvivingReferences-Methode

Aktualisiert: November 2007

Meldet das Layout von Objekten im Heap als Ergebnis einer nicht komprimierenden Garbage Collection.

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 Ergebnis einer nicht komprimierenden Garbage Collection noch vorhanden sind. Das heißt, der Wert von cSurvivingObjectIDRanges entspricht der Größe des objectIDRangeStart-Arrays und des cObjectIDRangeLength-Arrays, die jeweils eine ObjectID und eine Länge für jeden Objektblock speichern.

    Die nächsten zwei Argumente von SurvivingReferences sind parallele Arrays. Anders gesagt, objectIDRangeStart und cObjectIDRangeLength betreffen 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 ist.

  • cObjectIDRangeLength
    [in] Ein Array von Ganzzahlen, von denen jede die Größe eines noch vorhandenen Blocks zusammenhängender aktiver Objekte im Arbeitsspeicher ist.

    Eine Größe wird für jeden Block angegeben, auf den im objectIDRangeStart-Array verwiesen wird.

Hinweise

Die Elemente des objectIDRangeStart-Arrays und des cObjectIDRangeLength-Arrays sollten wie folgt interpretiert werden, um festzustellen, ob ein Objekt nach der Garbage Collection noch vorhanden ist. Angenommen, ein ObjectID-Wert (ObjectID) liegt innerhalb des folgenden Bereichs:

ObjectIDRangeStart[i] <= ObjectID < ObjectIDRangeStart[i] + cObjectIDRangeLength[i]

Für irgendeinen Wert i, der im folgenden Bereich liegt, ist das Objekt nach der Garbage Collection noch vorhanden:

0 <= i < cSurvivingObjectIDRanges

Eine nicht komprimierende Garbage Collection gibt den Arbeitsspeicher frei, der von "inaktiven" Objekten belegt ist, komprimiert den freigegebenen Platz jedoch nicht. Es wird also Arbeitsspeicher an den Heap zurückgegeben, jedoch werden keine aktiven Objekte verschoben.

Die Common Language Runtime (CLR) 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 bei einer bestimmten Generation erhält der Profiler entweder einen SurvivingReferences-Rückruf oder einen MovedReferences-Rückruf, jedoch nicht beide.

Während einer bestimmten Garbage Collection können unter anderem aufgrund der beschränkten internen Pufferung und der Meldung von mehreren Threads im Fall einer Garbage Collection auf dem Server mehrere SurvivingReferences-Rückrufe empfangen werden. Wenn es während einer Garbage Collection mehrere Rückrufe gibt, sind die Informationen kumuliert – alle Verweise, die in einem beliebigen SurvivingReferences-Rückruf gemeldet werden, sind nach der Garbage Collection noch vorhanden.

Anforderungen

Platformen: siehe Systemanforderungen für .NET Framework.

Header: CorProf.idl

Bibliothek: CorGuids.lib

.NET Framework-Versionen: 3.5 SP1, 3.5, 3.0 SP1, 3.0, 2.0 SP1, 2.0

Siehe auch

Konzepte

Objektverfolgung in der Profilerstellungs-API

Referenz

ICorProfilerCallback-Schnittstelle

ICorProfilerCallback2