Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Идентифицирует транзитивное замыкание объектов, на которые ссылаются эти корневые элементы как через прямые ссылки на поля члена, так и через зависимости ConditionalWeakTable.
Синтаксис
HRESULT ConditionalWeakTableElementReferences(
[in] ULONG cRootRefs,
[in, size_is(cRootRefs)] ObjectID keyRefIds[],
[in, size_is(cRootRefs)] ObjectID valueRefIds[],
[in, size_is(cRootRefs)] GCHandleID rootIds[]
);
Параметры
cRootRefs
[в] Количество элементов в массивах keyRefIds, valueRefIds и rootIds.
keyRefIds
[в] Массив идентификаторов объектов, каждый из которых содержит ObjectID для основного элемента в зависимости пары дескриптора.
valueRefIds
[в] Массив идентификаторов объектов, каждый из которых содержит ObjectID для дополнительного элемента в зависимости пары дескриптора. (keyRefIds[i] сохраняет valueRefIds[i] жизнь.)
rootIds
[в] Массив значений GCHandleID, указывающий на целое число, который содержит дополнительные сведения о корне сборки мусора.
Ни одно из значений ObjectID, возвращаемых методом ConditionalWeakTableElementReferences во время обратного вызова самого себя, не является допустимым, потому что сборка мусора может находиться в процессе перемещения объектов из старого в новое расположение. В связи с этим профилировщикам не следует пытаться проверять объекты во время вызова ConditionalWeakTableElementReferences. Вызов GarbageCollectionFinished означает, что все объекты перемещены в новые расположения и можно проводить проверку.
Пример
В следующем примере кода показано, как реализовать ICorProfilerCallback5 и использовать этот метод.
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;
}
Комментарии
Профилировщик для платформа .NET Framework 4.5 или более поздних версий реализует интерфейс ICorProfilerCallback5 и записывает зависимости, заданные методом ConditionalWeakTableElementReferences .
ICorProfilerCallback5 предоставляет полный набор зависимостей между динамическими объектами, представленными ConditionalWeakTable записями. Эти зависимости и ссылки на поля элементов, заданные методом ICorProfilerCallback::ObjectReferences , позволяют управляемому профилировщику создавать полный граф объектов динамических объектов.
Требования
Платформы: см. раздел Требования к системе.
Заголовок: CorProf.idl, CorProf.h
версии платформа .NET Framework: доступно с версии 4.5