Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Идентифицирует транзитивное замыкание объектов, на которые ссылаются эти корневые элементы как через прямые ссылки на поля члена, так и через зависимости 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