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