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