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