Metode ICorProfilerInfo3::RequestProfilerDetach
Menginstruksikan runtime bahasa umum untuk melepaskan profiler.
Sintaks
HRESULT RequestProfilerDetach(
[in] DWORD dwExpectedCompletionMilliseconds);
Parameter
dwExpectedCompletionMilliseconds
[di] Lamanya waktu, dalam milidetik, runtime bahasa umum (CLR) harus menunggu sebelum memeriksa apakah aman untuk membongkar profiler.
Tampilkan Nilai
Metode ini menampilkan HRESULT tertentu berikut serta kesalahan HRESULT yang menunjukkan kegagalan metode.
HRESULT | Deskripsi |
---|---|
S_OK | Permintaan pelepasan valid, dan prosedur pelepasan sekarang berlanjut di utas lain. Saat pelepasan benar-benar selesai, peristiwa ProfilerDetachSucceeded diterbitkan. |
E_CORPROF_E_CALLBACK3_REQUIRED | Profiler gagal dalam upaya IUnknown::QueryInterface untuk antarmuka ICorProfilerCallback3, yang harus diterapkan untuk mendukung operasi pelepasan. Pelepasan tidak dicoba. |
CORPROF_E_IMMUTABLE_FLAGS_SET | Pelepasan tidak mungkin dilakukan karena profiler mengatur bendera yang tidak dapat diubah saat startup. Pelepasan tidak dicoba; profiler masih terpasang sepenuhnya. |
CORPROF_E_IRREVERSIBLE_INSTRUMENTATION_PRESENT | Detasemen tidak mungkin karena profiler menggunakan kode instrumented common intermediate language (CIL), atau kait yang dimasukkan enter /leave . Pelepasan tidak dicoba; profiler masih terpasang sepenuhnya.Catatan Instrumented CIL adalah kode yang disediakan oleh profiler menggunakan metode SetILFunctionBody . |
CORPROF_E_RUNTIME_UNINITIALIZED | Runtime belum diinisialisasi dalam aplikasi yang dikelola. (Artinya, runtime belum dimuat sepenuhnya.) Kode kesalahan ini dapat ditampilkan saat pelepasan diminta di dalam metode ICorProfilerCallback::Initialize panggilan balik profiler. |
CORPROF_E_UNSUPPORTED_CALL_SEQUENCE | RequestProfilerDetach dipanggil pada waktu yang tidak didukung. Ini terjadi jika metode dipanggil pada utas terkelola tetapi tidak dari dalam metode ICorProfilerCallback atau dari dalam metode ICorProfilerCallback yang tidak dapat mentolerir pengumpulan sampah. Untuk informasi selengkapnya, lihat CORPROF_E_UNSUPPORTED_CALL_SEQUENCE HRESULT. |
Keterangan
Selama prosedur pelepasan, utas pelepasan (utas yang dibuat khusus untuk melepaskan profiler) sesekali memeriksa apakah semua utas telah keluar dari kode profiler. Profiler harus memberikan perkiraan berapa lama waktu yang dibutuhkan melalui parameter dwExpectedCompletionMilliseconds
. Nilai yang baik untuk digunakan adalah jumlah waktu yang biasa dihabiskan profiler di dalam metode ICorProfilerCallback*
yang diberikan; nilai ini tidak boleh kurang dari setengah dari jumlah waktu maksimum yang diharapkan oleh profiler untuk dihabiskan.
Utas pelepasan menggunakan dwExpectedCompletionMilliseconds
untuk memutuskan berapa lama waktu untuk tidur sebelum memeriksa apakah kode panggilan balik profiler telah dikeluarkan dari semua tumpukan. Meskipun detail algoritma berikut dapat berubah dalam rilis CLR mendatang, detail ini menggambarkan satu cara dwExpectedCompletionMilliseconds
dapat digunakan saat menentukan kapan waktu yang aman untuk membongkar profiler. Utas pelepasan pertama kali tidur selama dwExpectedCompletionMilliseconds
milidetik. Jika, setelah bangun dari tidur, CLR menemukan bahwa kode panggilan balik profiler masih ada, utas pelepasan akan tidur lagi, kali ini selama dua kali dwExpectedCompletionMilliseconds
milidetik. Jika, setelah bangun dari tidur kedua ini, utas pelepasan menemukan bahwa kode panggilan balik profiler masih ada, utas pelepasan akan tidur selama 10 menit sebelum memeriksa lagi. Utas pelepasan terus memeriksa ulang setiap 10 menit.
Jika profiler menetapkan dwExpectedCompletionMilliseconds
sebagai 0 (nol), CLR menggunakan nilai default 5000, yang berarti akan melakukan pemeriksaan setelah 5 detik, lagi setelah 10 detik, dan kemudian setiap 10 menit setelahnya.
Persyaratan
Platform: Lihat Persyaratan Sistem.
Header: CorProf.idl, CorProf.h
Pustaka: CorGuids.lib
Versi .NET Framework: Tersedia mulai dari 4