Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
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