Compartir a través de


ICorProfilerCallback5::ConditionalWeakTableElementReferences (Método)

Identifica el cierre transitivo de los objetos a los que esas raíces hacen referencia mediante referencias directas de campo de miembro y mediante dependencias ConditionalWeakTable.

Sintaxis

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] Número de elementos en las matrices keyRefIds, valueRefIds y rootIds.

keyRefIds
[in] Matriz de identificadores de objeto, cada uno de los cuales contiene el ObjectID del elemento principal en el par de controladores de dependencia.

valueRefIds
[in] Matriz de identificadores de objeto, cada uno de los cuales contiene el ObjectID del elemento secundario en el par de controladores de dependencia. (keyRefIds[i] mantener conexión de valueRefIds[i].)

rootIds
[in] Matriz de valores GCHandleID que apuntan a un entero que contiene información adicional sobre la raíz de recolección de elementos no utilizados.

Ninguno de los valores ObjectID devueltos por el método ConditionalWeakTableElementReferences son válidos durante la devolución de llamada en sí, porque el recolector de elementos no utilizados puede estar en proceso de mover objetos de ubicaciones anteriores a nuevas. Por lo tanto, los generadores de perfiles no deben intentar inspeccionar objetos durante una llamada a ConditionalWeakTableElementReferences. En GarbageCollectionFinished, todos los objetos se han movido a sus nuevas ubicaciones y puede que la inspección se haya realizado.

Ejemplo

El ejemplo de código siguiente muestra cómo implementar ICorProfilerCallback5 y usar 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;
}

Observaciones

Un generador de perfiles para .NET Framework 4.5 o versiones posteriores implementa la interfaz ICorProfilerCallback5 y registra las dependencias especificadas por el método ConditionalWeakTableElementReferences. ICorProfilerCallback5 proporciona el conjunto completo de dependencias entre los objetos activos representados por las entradas de ConditionalWeakTable. Estas dependencias y las referencias de campo de miembro especificadas por el método ICorProfilerCallback::ObjectReferences permiten a un generador de perfiles administrado generar el gráfico de objeto completo de los objetos activos.

Requisitos

Plataformas: Vea Requisitos de sistema.

Encabezado: CorProf.idl, CorProf.h

Versiones de .NET Framework: disponible a partir de la versión 4.5

Consulte también