Поделиться через


Метод ICorProfilerCallback5::ConditionalWeakTableElementReferences

Идентифицирует транзитивное замыкание объектов, на которые ссылаются эти корневые элементы как через прямые ссылки на поля члена, так и через зависимости 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

См. также раздел