Partilhar via


Método de ICorProfilerCallback::MovedReferences

Chamado para informar o novo layout de objetos na heap como resultado de uma coleta de lixo de compactação.

HRESULT MovedReferences(
    [in]  ULONG  cMovedObjectIDRanges,
    [in, size_is(cMovedObjectIDRanges)] ObjectID oldObjectIDRangeStart[] ,
    [in, size_is(cMovedObjectIDRanges)] ObjectID newObjectIDRangeStart[] ,
    [in, size_is(cMovedObjectIDRanges)] ULONG    cObjectIDRangeLength[] );

Parâmetros

  • cMovedObjectIDRanges
    [in] O número de blocos contíguos objetos que movidos como resultado de coleta de lixo a compactação. Ou seja, o valor de cMovedObjectIDRanges é o tamanho total da oldObjectIDRangeStart, newObjectIDRangeStart, e cObjectIDRangeLength arrays.

    Os próximos três argumentos de MovedReferences são matrizes em paralelo. Em outras palavras, oldObjectIDRangeStart[i], newObjectIDRangeStart[i], e cObjectIDRangeLength[i] todos os preocupação de um único bloco contíguo de objetos.

  • oldObjectIDRangeStart
    [in] Uma matriz de ObjectID valores, cada um deles é o antigo (coleção pre-garbage) o endereço de um bloco de contíguo, inicial live objetos na memória.

  • newObjectIDRangeStart
    [in] Uma matriz de ObjectID valores, cada um deles é nova (post-garbage coleção) Iniciando o endereço de um bloco contíguo, ao vivo de objetos na memória.

  • cObjectIDRangeLength
    [in] Uma matriz de inteiros, cada um deles é o tamanho de um bloco contíguo objetos na memória.

    Um tamanho especificado para cada bloco mencionada no oldObjectIDRangeStart e newObjectIDRangeStart arrays.

Comentários

Um coletor de lixo compactando recupera a memória ocupada por objetos inativos e compacta liberado espaço. Como resultado, os objetos ao vivo podem ser movidos dentro do heap, e ObjectID valores distribuídos por notificações anteriores podem alterar.

Suponha que uma existente ObjectID valor (oldObjectID) encontra-se no intervalo a seguir:

oldObjectIDRangeStart[i] <= oldObjectID < oldObjectIDRangeStart[i] + cObjectIDRangeLength[i]

Nesse caso, o offset do início do intervalo para o início do objeto é o seguinte:

oldObjectID - oldObjectRangeStart[i]

Para qualquer valor de i que está no seguinte intervalo:

0 <= i < cMovedObjectIDRanges

Você pode calcular a nova ObjectID da seguinte maneira:

newObjectID = newObjectIDRangeStart[i] + (oldObjectID – oldObjectIDRangeStart[i])

Nenhum da ObjectID valores passados MovedReferences são válidos durante o retorno de chamada, porque a coleta de lixo pode estar no meio da movimentação de objetos de locais antigos para novos locais. Portanto, geradores de perfis não devem tentar inspecionar objetos durante um MovedReferences chamada. A ICorProfilerCallback2::GarbageCollectionFinished chamada de retorno indica que todos os objetos que tenham sido movidos para suas novas localizações e inspeção pode ser executada.

Para obter mais informações sobre como a API de criação de perfil controla ObjectID valores, consulte A API de criação de perfil de rastreamento de objeto.

Requisitos

Plataformas: Consulte Requisitos de sistema do .NET Framework.

Cabeçalho: Corprof. idl, CorProf.h

Biblioteca: CorGuids.lib

.NET Framework versões: 4, 3.5 SP1, 3.5, 3.0 SP1, 3.0, 2.0 SP1, 2.0

Consulte também

Referência

Interface de ICorProfilerCallback

Outros recursos

Interfaces de criação de perfil

A criação de perfil (referência de API não gerenciada)