Partilhar via


Método ICorProfilerCallback2::SurvivingReferences

Comunica o esquema de objetos na área dinâmica como resultado de uma libertação 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 libertação de lixo não compactado. Ou seja, o valor de cSurvivingObjectIDRanges é o tamanho das objectIDRangeStart matrizes e cObjectIDRangeLength , que armazenam um ObjectID comprimento e um comprimento, respetivamente, para cada bloco de objetos.

Os dois argumentos seguintes de SurvivingReferences são matrizes paralelas. Por outras palavras, objectIDRangeStart e cObjectIDRangeLength diz respeito ao mesmo bloco de objetos contíguos.

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

cObjectIDRangeLength
[in] Uma matriz de números inteiros, cada um dos quais é do tamanho de um bloco sobrevivente de objetos contíguos na memória.

É especificado um tamanho para cada bloco referenciado na objectIDRangeStart matriz.

Observações

Importante

Este método comunica tamanhos como MAX_ULONG para objetos superiores a 4 GB em plataformas de 64 bits. Para objetos com mais de 4 GB, utilize o método ICorProfilerCallback4::SurvivingReferences2 .

Os elementos das objectIDRangeStart matrizes e cObjectIDRangeLength devem ser interpretados da seguinte forma para determinar se um objeto sobreviveu à libertação da memória. Suponha que um ObjectID valor (ObjectID) está dentro do seguinte intervalo:

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

Para qualquer valor que i esteja no intervalo seguinte, o objeto sobreviveu à libertação da memória:

0 <= i<cSurvivingObjectIDRanges

Uma coleção de lixo não compactado recupera a memória ocupada por objetos "mortos", mas não compacta esse espaço libertado. Como resultado, a memória é devolvida à área dinâmica, mas não são movidos objetos "dinâmicos".

O runtime de linguagem comum (CLR) exige SurvivingReferences coleções de lixo não compactadas. Para compactar coleções de lixo, é chamado ICorProfilerCallback::MovedReferences . Uma única coleção de lixo pode ser compactado para uma geração e não compactar para outra. Para uma coleção de lixo em qualquer geração específica, o gerador de perfis receberá uma SurvivingReferences chamada de retorno ou uma MovedReferences chamada de retorno, mas não ambas.

Podem ser recebidas várias SurvivingReferences chamadas de retorno durante uma coleção de lixo específica, devido a memória intermédia interna limitada, relatórios de vários threads no caso da recolha de lixo do servidor, entre outros motivos. No caso de várias chamadas de retorno durante uma coleção de lixo, as informações são cumulativas — todas as referências que são reportadas em qualquer SurvivingReferences chamada de retorno sobrevivem à libertação do lixo.

Requisitos

Plataformas: Veja Requisitos do Sistema.

Cabeçalho: CorProf.idl, CorProf.h

Biblioteca: CorGuids.lib

.NET Framework Versões: Disponível desde 2.0

Ver também