Compartilhar via


Método ICorProfilerCallback2::SurvivingReferences

Relata o layout de objetos no heap como resultado de uma coleta de lixo não compactado.

Sintaxe

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

Parâmetros

cSurvivingObjectIDRanges
[in] O número de blocos de objetos contíguos que sobreviveram como resultado da coleta de lixo não compactada. Ou seja, o valor de cSurvivingObjectIDRanges é o tamanho das matrizes objectIDRangeStart e cObjectIDRangeLength, que armazenam um ObjectID e um comprimento, respectivamente, para cada bloco de objetos.

Os dois próximos argumentos de SurvivingReferences são matrizes paralelas. Em outras palavras, objectIDRangeStart e cObjectIDRangeLength dizem respeito ao mesmo bloco de objetos contíguos.

objectIDRangeStart
[in] Uma matriz de valores de ObjectID, cada um deles é o endereço inicial de um bloco de objetos dinâmicos contíguos na memória.

cObjectIDRangeLength
[in] Uma matriz de inteiros, cada um deles é o tamanho de um bloco sobrevivente de objetos contíguos na memória.

Um tamanho é especificado para cada bloco referenciado na matriz objectIDRangeStart.

Comentários

Importante

Esse método relata tamanhos como MAX_ULONG para objetos maiores que 4 GB em plataformas de 64-bit. Para objetos maiores que 4 GB, use o método ICorProfilerCallback4::SurvivingReferences2.

Os elementos das matrizes objectIDRangeStart e cObjectIDRangeLength devem ser interpretados da seguinte maneira para determinar se um objeto sobreviveu à coleta de lixo. Suponha que um valor de ObjectID (ObjectID) esteja dentro do seguinte intervalo:

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

Para qualquer valor de i que esteja no intervalo a seguir, o objeto sobreviveu à coleta de lixo:

0 <= i<cSurvivingObjectIDRanges

Uma coleta de lixo não compactada recupera a memória ocupada por objetos "mortos", mas não compacta esse espaço liberado. Como resultado, a memória é retornada para o heap, mas nenhum objeto "ao vivo" é movido.

O CLR (Common Language Runtime) exige SurvivingReferences para coletas de lixo não compactadas. Para compactar coletas de lixo, ICorProfilerCallback::MovedReferences é chamado em vez disso. Uma única coleta de lixo pode ser compactada para uma geração e não compactada para outra. Para uma coleta de lixo em qualquer geração específica, o criador de perfil receberá um retorno de chamada de SurvivingReferences ou de MovedReferences, mas não de ambos.

Vários retornos de chamada de SurvivingReferences podem ser recebidos durante uma coleta de lixo específica, devido a buffers internos limitados, vários relatórios de threads no caso da coleta de lixo do servidor e outros motivos. No caso de vários retornos de chamada durante uma coleta de lixo, as informações são cumulativas. Todas as referências relatadas em qualquer retorno de chamada de SurvivingReferences sobrevivem à coleta de lixo.

Requisitos

Plataformas: confira Requisitos do sistema.

Cabeçalho: CorProf.idl, CorProf.h

Biblioteca: CorGuids.lib

Versões do .NET Framework: disponíveis desde 2.0

Confira também