Bagikan melalui


Metode ICorProfilerCallback5::ConditionalWeakTableElementReferences

Mengidentifikasi penutupan transitif objek yang dirujuk oleh akar tersebut melalui referensi bidang anggota langsung dan melalui dependensi ConditionalWeakTable.

Sintaks

HRESULT ConditionalWeakTableElementReferences(
     [in]                     ULONG    cRootRefs,
     [in, size_is(cRootRefs)] ObjectID keyRefIds[],
     [in, size_is(cRootRefs)] ObjectID valueRefIds[],
     [in, size_is(cRootRefs)] GCHandleID rootIds[]
);

Parameter

cRootRefs
[in] Jumlah elemen dalam keyRefIdsarray , , valueRefIdsdan rootIds .

keyRefIds
[in] Array ID objek yang masing-masing berisi ObjectID untuk elemen utama dalam pasangan handel yang bergantung.

valueRefIds
[in] Array ID objek yang masing-masing berisi ObjectID untuk elemen sekunder dalam pasangan handel yang bergantung. (keyRefIds[i] Tetap valueRefIds[i] aktif.)

rootIds
[in] Array nilai GCHandleID yang menunjuk ke bilangan bulat yang berisi informasi tambahan tentang akar pengumpulan sampah.

Tidak ada nilai ObjectID yang dikembalikan oleh metode ConditionalWeakTableElementReferences yang valid selama panggilan balik itu sendiri, karena pengumpul sampah mungkin sedang dalam proses memindahkan objek dari lokasi lama ke baru. Oleh karena itu, profiler tidak boleh mencoba memeriksa objek selama panggilan ConditionalWeakTableElementReferences. Pada GarbageCollectionFinished, semua objek telah dipindahkan ke lokasi baru mereka dan inspeksi dapat dilakukan.

Contoh

Contoh kode berikut menunjukkan cara menerapkan ICorProfilerCallback5 dan menggunakan metode ini.

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;
}

Keterangan

Profiler untuk .NET Framework 4.5 atau versi yang lebih baru menerapkan antarmuka ICorProfilerCallback5 dan mencatat dependensi yang ditentukan oleh metode ConditionalWeakTableElementReferences. ICorProfilerCallback5 menyediakan serangkaian dependensi lengkap di antara objek langsung yang diwakili oleh entri ConditionalWeakTable. Dependensi ini dan referensi bidang anggota yang ditentukan oleh metode ICorProfilerCallback::ObjectReferences memungkinkan profiler terkelola untuk menghasilkan grafik objek lengkap dari objek langsung.

Persyaratan

Platform: Lihat Persyaratan Sistem.

Header: CorProf.idl, CorProf.h

Versi .NET Framework: Tersedia mulai dari 4.5

Lihat juga