Partilhar via


Método ICorProfilerCallback4::SurvivingReferences2

Comunica o esquema de objetos na área dinâmica para dados como resultado de uma libertação da memória não compactado. Este método é chamado se o gerador de perfis tiver implementado a interface ICorProfilerCallback4 . Esta chamada de retorno substitui o método ICorProfilerCallback2::SurvivingReferences , porque pode comunicar intervalos maiores de objetos cujos comprimentos excedem o que pode ser expresso num ULONG.

Sintaxe

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

Parâmetros

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

Os dois argumentos seguintes de SurvivingReferences2 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

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 deste i valor no intervalo seguinte, o objeto sobreviveu à libertação da memória:

0 <= i<cSurvivingObjectIDRanges

Uma libertação da memória 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 SurvivingReferences2 libertações de lixo não compactadas. Para compactar libertações de lixo, é chamado MovedReferences2 . Uma única libertação da memória pode ser compactado para uma geração e não compactado para outra. Para uma libertação da memória em qualquer geração específica, o gerador de perfis receberá uma SurvivingReferences2 chamada de retorno ou uma chamada de retorno MovedReferences2 , mas não ambas.

Podem ser recebidas várias SurvivingReferences2 chamadas de retorno durante uma libertação da memória específica, devido a memória intermédia interna limitada, várias chamadas de retorno durante a libertação da memória do servidor, entre outros motivos. No caso de várias chamadas de retorno durante uma libertação da memória, as informações são cumulativas; todas as referências comunicadas em qualquer SurvivingReferences2 chamada de retorno sobrevivem à libertação da memória.

Se o gerador de perfis implementar as interfaces ICorProfilerCallback e ICorProfilerCallback4 , o SurvivingReferences2 método é chamado antes do método ICorProfilerCallback2::SurvivingReferences , mas apenas se SurvivingReferences2 for devolvido com êxito. Os geradores de perfis podem devolver um HRESULT que indica uma falha do SurvivingReferences2 método para evitar chamar o segundo método.

Requisitos

Plataformas: Veja Requisitos de Sistema.

Cabeçalho: CorProf.idl, CorProf.h

Biblioteca: CorGuids.lib

.NET Framework Versões: Disponível desde a versão 4.5

Ver também