Dela via


ICorProfilerCallback4::SurvivingReferences2-metod

Rapporterar layouten för objekt i heapen som ett resultat av en icke-komprimerande skräpinsamling. Den här metoden anropas om profileraren har implementerat gränssnittet ICorProfilerCallback4 . Den här återanropet ersätter metoden ICorProfilerCallback2::SurvivingReferences eftersom den kan rapportera större intervall av objekt vars längd överskrider vad som kan uttryckas i en ULONG.

Syntax

HRESULT SurvivingReferences2(  
    [in] ULONG  cSurvivingObjectIDRanges,  
    [in, size_is(cSurvivingObjectIDRanges)] ObjectID  
                objectIDRangeStart[] ,  
    [in, size_is(cSurvivingObjectIDRanges)] SIZE_T  
                cObjectIDRangeLength[] );  

Parametrar

cSurvivingObjectIDRanges
[i] Antalet block med sammanhängande objekt som överlevde till följd av den icke-komprimerande skräpinsamlingen. Det betyder att värdet cSurvivingObjectIDRanges för är storleken på matriserna objectIDRangeStart och cObjectIDRangeLength , som lagrar en ObjectID respektive en längd för varje objektblock.

Följande två argument SurvivingReferences2 är parallella matriser. Med andra ord, objectIDRangeStart och cObjectIDRangeLength gäller samma block med sammanhängande objekt.

objectIDRangeStart
[i] En matris med ObjectID värden, som var och en är startadressen för ett block med sammanhängande, levande objekt i minnet.

cObjectIDRangeLength
[i] En matris med heltal, som var och en är storleken på ett kvarvarande block med sammanhängande objekt i minnet.

En storlek anges för varje block som refereras till i matrisen objectIDRangeStart .

Kommentarer

Elementen i matriserna objectIDRangeStart och cObjectIDRangeLength bör tolkas på följande sätt för att avgöra om ett objekt överlevde skräpinsamlingen. Anta att ett ObjectID värde (ObjectID) ligger inom följande intervall:

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

För alla värden i för som finns i följande intervall har objektet överlevt skräpinsamlingen:

0 <= i<cSurvivingObjectIDRanges

En icke-komprimerande skräpsamling återtar minnet som upptas av "döda" objekt, men komprimerar inte det frigjorda utrymmet. Därför returneras minnet till heapen, men inga "levande" objekt flyttas.

CLR (Common Language Runtime) kräver SurvivingReferences2 icke-komprimerande skräpsamlingar. För att komprimera skräpsamlingar anropas MovedReferences2 i stället. En enda skräpinsamling kan komprimeras för en generation och inte komprimeras för en annan. För en skräpinsamling på en viss generation får profileraren antingen ett SurvivingReferences2 återanrop eller ett MovedReferences2-återanrop , men inte båda.

Flera SurvivingReferences2 återanrop kan tas emot under en viss skräpinsamling, på grund av begränsad intern buffring, flera återanrop under serverskräpinsamling och andra orsaker. Vid flera återanrop under en skräpinsamling är informationen kumulativ. alla referenser som rapporteras i återanrop SurvivingReferences2 överlever skräpinsamlingen.

Om profileraren implementerar både ICorProfilerCallback - och ICorProfilerCallback4-gränssnittenSurvivingReferences2 anropas metoden före metoden ICorProfilerCallback2::SurvivingReferences , men endast om SurvivingReferences2 den returneras korrekt. Profilerare kan returnera en HRESULT som indikerar ett fel från SurvivingReferences2 metoden för att undvika att anropa den andra metoden.

Krav

Plattformar: Se Systemkrav.

Huvudet: CorProf.idl, CorProf.h

Bibliotek: CorGuids.lib

.NET Framework versioner: Tillgänglig sedan 4.5

Se även