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 keyRefIds
matrizes , valueRefIds
e 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