Compartilhar via


Método ICorProfilerCallback::MovedReferences

Chamado para informar o novo layout de objetos no heap sistema autônomo resultado de um lixo compactando coleçã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 movidos sistema autônomo resultado de lixo compactando coleção. Ou seja, o valor de cMovedObjectIDRanges é o dimensionar total das oldObjectIDRangeStart, newObjectIDRangeStart, e cObjectIDRangeLength matrizes.

    Os próximos três argumentos de MovedReferences são matrizes paralelas. Em outras palavras, oldObjectIDRangeStart[i], newObjectIDRangeStart[i], e cObjectIDRangeLength[i] todos se referem a um único bloco contíguo de objetos.

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

  • newObjectIDRangeStart
    [in] Uma matriz de ObjectID valores, cada um deles é o novo endereço inicial (coleção post-garbage) de um bloco de contíguos, em tempo real a objetos na memória.

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

    Um dimensionar é especificado para cada bloco referenciado no oldObjectIDRangeStart e newObjectIDRangeStart matrizes.

Comentários

Um coletor de lixo compactando recupera a memória ocupada por objetos inativos e compacta liberado espaço. sistema autônomo resultado, objetos ao vivo podem ser movidos na pilha e ObjectID valores distribuídos por notificações anteriores podem ser alteradas.

Suponha que um existenteObjectID valor)oldObjectID) se encontra no seguinte intervalo:

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 sistema autônomo a seguir:

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

Nenhum o ObjectID valores passados por MovedReferences são válido 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 telefonar. A ICorProfilerCallback2::GarbageCollectionFinishedretorno de chamada indica que todos os objetos foram movidos para seus novos locais e inspeção pode ser executada.

Para obter mais informações sobre como a API de criação de perfil controla ObjectID valores, consulte Objeto de acompanhamento na API de criação de perfil.

Requisitos

Plataformas: See Requisitos de sistema do .NET framework.

Cabeçalho: CorProf.idl

Biblioteca: CorGuids.lib

.NET Framework Versions: 3.5 SP1, 3,5, 3.0 SP1, 3.0, 2.0 SP1, 2.0

Consulte também

Referência

Interface ICorProfilerCallback

Outros recursos

Interfaces de criação de perfil

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