Metodo ICorProfilerCallback4::SurvivingReferences2

Indica il layout degli oggetti nell'heap in seguito a un'operazione di Garbage Collection senza compattazione. Questo metodo viene chiamato se il profiler ha implementato l'interfaccia ICorProfilerCallback4 . Questo callback sostituisce il metodo ICorProfilerCallback2::SurvivingReferences , perché può segnalare intervalli più grandi di oggetti le cui lunghezze superano ciò che può essere espresso in una ULONG.

Sintassi

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

Parametri

cSurvivingObjectIDRanges
[in] Numero di blocchi di oggetti contigui rimasti in seguito alla mancata compattazione dell'operazione di Garbage Collection, ovvero il valore di cSurvivingObjectIDRanges è la dimensione delle matrici objectIDRangeStart e cObjectIDRangeLength, in cui vengono rispettivamente archiviati un ObjectID e una lunghezza per ogni blocco di oggetti.

I successivi due argomenti di SurvivingReferences2 sono matrici parallele. In altre parole, objectIDRangeStart e cObjectIDRangeLength riguardano lo stesso blocco di oggetti contigui.

objectIDRangeStart
[in] Matrice di valori ObjectID, ognuno dei quali è l'indirizzo iniziale di un blocco di oggetti attivi contigui in memoria.

cObjectIDRangeLength
[in] Matrice di Integer, ognuno dei quali è la dimensione di un blocco escluso di oggetti contigui in memoria.

Viene specificata una dimensione per ogni blocco a cui si fa riferimento nella matrice objectIDRangeStart.

Commenti

Gli elementi delle matrici objectIDRangeStart e cObjectIDRangeLength devono essere interpretati come indicato di seguito per determinare se un oggetto è stato escluso dall'operazione di Garbage Collection. Si supponga che un valore ObjectID (ObjectID) si trovi nell'intervallo seguente:

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

Per qualsiasi valore di i compreso nell'intervallo seguente, l'oggetto è stato escluso dall'operazione di Garbage Collection:

0 <= i<cSurvivingObjectIDRanges

Una mancata compattazione dell'operazione di Garbage Collection recupera la memoria occupata dagli oggetti inutilizzati, ma non compatta lo spazio liberato. Di conseguenza, la memoria viene restituita all'heap, ma gli oggetti attivi non vengono spostati.

Common Language Runtime (CLR) chiama SurvivingReferences2 per eseguire operazioni di Garbage Collection senza compattazione. Per compattare garbage collections, viene invece chiamato MovedReferences2 . Una stessa operazione di Garbage Collection può eseguire la compattazione per una generazione e non eseguirla per un'altra. Per una garbage collection in qualsiasi generazione specifica, il profiler riceverà un SurvivingReferences2 callback o un callback MovedReferences2 , ma non entrambi.

Durante una particolare operazione di Garbage Collection possono essere ricevuti più callback SurvivingReferences2, a causa del buffer interno limitato, di callback multipli durante l'operazione di Garbage Collection per server e di altri motivi. Nel caso di più callback durante un'operazione di Garbage Collection, le informazioni sono cumulative. Tutti i riferimenti segnalati in qualsiasi callback SurvivingReferences2 vengono esclusi dall'operazione di Garbage Collection.

Se il profiler implementa sia il metodo ICorProfilerCallback che le interfacce ICorProfilerCallback4 , il SurvivingReferences2 metodo viene chiamato prima del metodo ICorProfilerCallback2::SurvivingReferences , ma solo se SurvivingReferences2 restituisce correttamente. I profiler possono restituire un valore HRESULT indicante un errore nel metodo SurvivingReferences2 per evitare di chiamare il secondo metodo.

Requisiti

Piattaforme: vedere Requisiti di sistema di .NET Framework.

Intestazione: CorProf.idl, CorProf.h

Libreria: CorGuids.lib

Versioni di .NET Framework: Disponibile dalla versione 4.5

Vedi anche