Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
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