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