ICorProfilerCallback5::Método ConditionalWeakTableElementReferences
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