Bagikan melalui


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

Lihat juga