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