Partilhar via


Método ICorProfilerCallback5::ConditionalWeakTableElementReferences

Identifica o fecho transitivo de objetos referenciados por essas raízes através de referências de campos de membros diretos e através ConditionalWeakTable de dependências.

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 keyRefIdsmatrizes , valueRefIdse rootIds .

keyRefIds
[in] Uma matriz de IDs de objeto, cada um dos quais contém o ObjectID para o elemento primário no par de identificadores dependentes.

valueRefIds
[in] Uma matriz de IDs de objeto, cada um dos quais contém o ObjectID para o elemento secundário no par de identificadores dependentes. (keyRefIds[i] mantém-se valueRefIds[i] vivo.)

rootIds
[in] Uma matriz de GCHandleID valores que apontam para um número inteiro que contém informações adicionais sobre a raiz de libertação da memória.

Nenhum dos ObjectID valores devolvidos pelo ConditionalWeakTableElementReferences método é válido durante a chamada de retorno propriamente dita, porque o recoletor de lixo pode estar a mover objetos de localizações antigas para novas. Por conseguinte, os geradores de perfis não devem tentar inspecionar objetos durante uma ConditionalWeakTableElementReferences chamada. No GarbageCollectionFinished, todos os objetos foram movidos para as suas novas localizações e a inspeção pode ser feita.

Exemplo

O exemplo de código seguinte demonstra como implementar ICorProfilerCallback5 e utilizar este 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;
}

Observações

Um gerador de perfis para o .NET Framework 4.5 ou versões posteriores implementa a interface ICorProfilerCallback5 e regista as dependências especificadas pelo ConditionalWeakTableElementReferences método . ICorProfilerCallback5 fornece o conjunto completo de dependências entre objetos dinâmicos representados por ConditionalWeakTable entradas. Estas dependências e as referências de campo de membro especificadas pelo método ICorProfilerCallback::ObjectReferences permitem que um gerador de perfis gerido gere o grafo de objeto completo de objetos dinâmicos.

Requisitos

Plataformas: Veja Requisitos de Sistema.

Cabeçalho: CorProf.idl, CorProf.h

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

Ver também