Compartilhar via


ICorProfilerCallback5::Método ConditionalWeakTableElementReferences

Identifica o fechamento transitivo de objetos referenciados por estas raízes por meio de referências diretas do campo de membro e de dependências ConditionalWeakTable.

Sintaxe

HRESULT ConditionalWeakTableElementReferences(
     [in]                     ULONG    cRootRefs,
     [in, size_is(cRootRefs)] ObjectID keyRefIds[],
     [in, size_is(cRootRefs)] ObjectID valueRefIds[],
     [in, size_is(cRootRefs)] GCHandleID rootIds[]
);

Parâmetros

cRootRefs
[in] O número de elementos nas matrizes keyRefIds, valueRefIds e rootIds.

keyRefIds
[in] Uma matriz de IDs de objeto, cada uma contendo o ObjectID para o elemento principal do par do identificador dependente.

valueRefIds
[in] Uma matriz de IDs de objeto, cada uma contendo o ObjectID para o elemento secundário do par do identificador dependente. (keyRefIds[i] mantém valueRefIds[i] vivo.)

rootIds
[in] Uma matriz de valores GCHandleID que apontam para um número inteiro que contém informações adicionais sobre a raiz de coleta de lixo.

Nenhum dos valores ObjectID retornados pelo método ConditionalWeakTableElementReferences é válido durante o retorno de chamada em si, porque o coletor de lixo pode estar no processo de mover objetos de locais antigos para novos. Portanto, os criadores de perfis não devem tentar inspecionar objetos durante uma chamada ConditionalWeakTableElementReferences. Ao GarbageCollectionFinished, todos os objetos foram movidos para os novos locais e a inspeção pode ser feita.

Exemplo

O exemplo de código a seguir demonstra como implementar o ICorProfilerCallback5 e usar esse método.

HRESULT Callback5Impl::ConditionalWeakTableElementReferences(
    ULONG      cRootRefs,
    ObjectID   keyRefIds[],
    ObjectID   valueRefIds[],
    GCHandleID rootIds[])
{
    printf("Callback5Impl::ConditionalWeakTableElementReferences called\n");
    for (unsigned int i = 0; i < cRootRefs; ++i)
    {
        // Save dependency to XML for later retrieval
        PersistDependencyToXml(rootIds[i], keyRefIds[i], valueRefIds[i]);
        // or store dependency to an internal map
        m_cwt_deps->add_dep(rootIds[i], keyRefIds[i], valueRefIds[i]);
        // or add arc to object graph
        m_obj_graph->add_arc(keyRefIds[i], valueRefIds[i], rootIds[i]);
    }
    return S_OK;
}

Comentários

Um criador de perfil para o .NET Framework 4.5 ou versões posteriores implementa a interface ICorProfilerCallback5 e registra as dependências especificadas pelo método ConditionalWeakTableElementReferences. ICorProfilerCallback5 fornece o conjunto completo de dependências entre os objetos ativos representados pelas entradas de ConditionalWeakTable. Essas dependências e as referências de campo de membro especificadas pelo método ICorProfilerCallback::ObjectReferences permitem que um criador de perfil gere o grafo de objeto completo de objetos vivos.

Requisitos

Plataformas: confira Requisitos do sistema.

Cabeçalho: CorProf.idl, CorProf.h

Versões do .NET Framework: Disponíveis desde a versão 4.5

Confira também