Metodo ICorProfilerCallback5::ConditionalWeakTableElementReferences
Identifica la chiusura transitiva di oggetti a cui le radici fanno riferimento tramite i riferimenti di campo di membri diretti e tramite le dipendenze ConditionalWeakTable
.
Sintassi
HRESULT ConditionalWeakTableElementReferences(
[in] ULONG cRootRefs,
[in, size_is(cRootRefs)] ObjectID keyRefIds[],
[in, size_is(cRootRefs)] ObjectID valueRefIds[],
[in, size_is(cRootRefs)] GCHandleID rootIds[]
);
Parametri
cRootRefs
[in] Numero di elementi nelle matrici keyRefIds
, valueRefIds
e rootIds
.
keyRefIds
[in] Matrice di ID oggetto, ognuno dei quali include il valore ObjectID
per l'elemento primario nella coppia di handle dipendente.
valueRefIds
[in] Matrice di ID oggetto, ognuno dei quali include il valore ObjectID
per l'elemento secondario nella coppia di handle dipendente. (keyRefIds[i]
mantiene valueRefIds[i]
vivo.
rootIds
[in] Matrice di valori GCHandleID
che fanno riferimento a un valore Integer contenente informazioni aggiuntive sulla radice di Garbage Collection.
Nessuno dei valori ObjectID
restituito dal metodo ConditionalWeakTableElementReferences
è valido durante il callback stesso, poiché è possibile che il Garbage Collector stia spostando oggetti da posizioni precedenti a nuove posizioni. I profiler non devono quindi tentare di verificare gli oggetti durante una chiamata a ConditionalWeakTableElementReferences
. In corrispondenza di GarbageCollectionFinished
, tutti gli oggetti saranno stati spostati nelle nuove posizioni e sarà possibile verificarli.
Esempio
Nell'esempio di codice seguente viene illustrato come implementare ICorProfilerCallback5 e usare questo metodo.
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;
}
Commenti
Un profiler per .NET Framework 4.5 o versioni successive implementa l'interfaccia ICorProfilerCallback5 e registra le dipendenze specificate dal ConditionalWeakTableElementReferences
metodo . ICorProfilerCallback5
fornisce il set completo di dipendenze tra gli oggetti attivi rappresentati dalle ConditionalWeakTable
voci. Queste dipendenze e i riferimenti al campo membro specificati dal metodo ICorProfilerCallback::ObjectReferences consentono a un profiler gestito di generare l'oggetto grafico completo degli oggetti attivi.
Requisiti
Piattaforme: vedere Requisiti di sistema di .NET Framework.
Intestazione: CorProf.idl, CorProf.h
Versioni di .NET Framework: Disponibile dalla versione 4.5