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 keyRefIds
array , , valueRefIds
dan 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