Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Identifica o fechamento transitivo de objetos referenciados por estas raízes por meio de referências diretas do campo de membro e de dependências ConditionalWeakTable.
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 matrizes keyRefIds, valueRefIds e rootIds.
keyRefIds
[in] Uma matriz de IDs de objeto, cada uma contendo o ObjectID para o elemento principal do par do identificador dependente.
valueRefIds
[in] Uma matriz de IDs de objeto, cada uma contendo o ObjectID para o elemento secundário do par do identificador dependente. (keyRefIds[i] mantém valueRefIds[i] vivo.)
rootIds
[in] Uma matriz de valores GCHandleID que apontam para um número inteiro que contém informações adicionais sobre a raiz de coleta de lixo.
Nenhum dos valores ObjectID retornados pelo método ConditionalWeakTableElementReferences é válido durante o retorno de chamada em si, porque o coletor de lixo pode estar no processo de mover objetos de locais antigos para novos. Portanto, os criadores de perfis não devem tentar inspecionar objetos durante uma chamada ConditionalWeakTableElementReferences. Ao GarbageCollectionFinished, todos os objetos foram movidos para os novos locais e a inspeção pode ser feita.
Exemplo
O exemplo de código a seguir demonstra como implementar o ICorProfilerCallback5 e usar esse 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;
}
Comentários
Um criador de perfil para o .NET Framework 4.5 ou versões posteriores implementa a interface ICorProfilerCallback5 e registra as dependências especificadas pelo método ConditionalWeakTableElementReferences.
ICorProfilerCallback5 fornece o conjunto completo de dependências entre os objetos ativos representados pelas entradas de ConditionalWeakTable. Essas dependências e as referências de campo de membro especificadas pelo método ICorProfilerCallback::ObjectReferences permitem que um criador de perfil gere o grafo de objeto completo de objetos vivos.
Requisitos
Plataformas: confira Requisitos do sistema.
Cabeçalho: CorProf.idl, CorProf.h
Versões do .NET Framework: Disponíveis desde a versão 4.5