Bagikan melalui


Menyiapkan Lingkungan Pembuatan Profil

Nota

Ada perubahan besar pada pembuatan profil di .NET Framework 4.

Ketika proses terkelola (aplikasi atau layanan) dimulai, proses tersebut memuat runtime bahasa umum (CLR). Ketika CLR diinisialisasi, CLR mengevaluasi dua variabel lingkungan berikut untuk memutuskan apakah proses harus terhubung ke profiler:

  • COR_ENABLE_PROFILING: CLR terhubung ke profiler hanya jika variabel lingkungan ini ada dan diatur ke 1.

  • COR_PROFILER: Jika pemeriksaan COR_ENABLE_PROFILING lolos, CLR terhubung ke profiler yang memiliki CLSID atau ProgID ini, yang harus disimpan sebelumnya di registri. Variabel lingkungan COR_PROFILER didefinisikan sebagai string, seperti yang ditunjukkan dalam dua contoh berikut.

    set COR_PROFILER={32E2F4DA-1BEA-47ea-88F9-C5DAF691C94A}
    set COR_PROFILER="MyProfiler"
    

Untuk membuat profil aplikasi CLR, Anda harus mengatur variabel lingkungan COR_ENABLE_PROFILING dan COR_PROFILER sebelum menjalankan aplikasi. Anda juga harus memastikan bahwa DLL profiler terdaftar.

Nota

Dimulai dengan .NET Framework 4, profiler tidak perlu didaftarkan.

Nota

Untuk menggunakan profiler .NET Framework versi 2.0, 3.0, dan 3.5 di .NET Framework 4 dan versi yang lebih baru, Anda harus mengatur variabel lingkungan COMPLUS_ProfAPI_ProfilerCompatibilitySetting.

Cakupan Variabel Lingkungan

Cara Anda mengatur variabel lingkungan COR_ENABLE_PROFILING dan COR_PROFILER akan menentukan cakupan pengaruhnya. Anda dapat mengatur variabel ini dengan salah satu cara berikut:

  • Jika Anda mengatur variabel dalam panggilan ICorDebug::CreateProcess , variabel tersebut hanya akan berlaku untuk aplikasi yang Anda jalankan pada saat itu. (Mereka juga akan berlaku untuk aplikasi lain yang dimulai oleh aplikasi yang mewarisi lingkungan.)

  • Jika Anda mengatur variabel di jendela Prompt Perintah, variabel tersebut akan berlaku untuk semua aplikasi yang dimulai dari jendela tersebut.

  • Jika Anda mengatur variabel di tingkat pengguna, variabel tersebut akan berlaku untuk semua aplikasi yang Anda mulai dengan File Explorer. Jendela Prompt Perintah yang Anda buka setelah mengatur variabel akan memiliki pengaturan lingkungan ini, dan begitu juga aplikasi apa pun yang Anda mulai dari jendela tersebut. Untuk mengatur variabel lingkungan di tingkat pengguna, klik kanan Komputer Saya, klik Properti, klik tab Tingkat Lanjut , klik Variabel Lingkungan, dan tambahkan variabel ke daftar Variabel pengguna .

  • Jika Anda mengatur variabel di tingkat komputer, variabel tersebut akan berlaku untuk semua aplikasi yang dimulai di komputer tersebut. Jendela Prompt Perintah yang Anda buka di komputer tersebut akan memiliki pengaturan lingkungan ini, dan begitu juga aplikasi apa pun yang Anda mulai dari jendela tersebut. Ini berarti bahwa setiap proses terkelola di komputer tersebut akan dimulai dengan profiler Anda. Untuk mengatur variabel lingkungan di tingkat komputer, klik kanan Komputer Saya, klik Properti, klik tab Tingkat Lanjut , klik Variabel Lingkungan, tambahkan variabel ke daftar Variabel sistem , lalu mulai ulang komputer Anda. Setelah menghidupkan ulang, variabel akan tersedia di seluruh sistem.

Jika Membuat profil Layanan Windows, Anda harus memulai ulang komputer setelah mengatur variabel lingkungan dan mendaftarkan DLL profiler. Untuk informasi selengkapnya tentang pertimbangan ini, lihat bagian Membuat Profil Layanan Windows.

Pertimbangan Tambahan

  • Kelas profiler mengimplementasikan antarmuka ICorProfilerCallback dan ICorProfilerCallback2 . Di .NET Framework versi 2.0, profiler harus mengimplementasikan ICorProfilerCallback2. Jika tidak, ICorProfilerCallback2 tidak akan dimuat.

  • Hanya satu profiler yang dapat memprofilkan proses pada satu waktu di lingkungan tertentu. Anda dapat mendaftarkan dua profiler yang berbeda di lingkungan yang berbeda, tetapi masing-masing harus memprofilkan proses terpisah. Profiler harus diimplementasikan sebagai DLL server COM dalam proses, yang dipetakan ke ruang alamat yang sama dengan proses yang sedang diprofilkan. Ini berarti bahwa profiler berjalan dalam proses. .NET Framework tidak mendukung jenis server COM lainnya. Misalnya, jika profiler ingin memantau aplikasi dari komputer jarak jauh, profiler harus menerapkan agen pengumpul di setiap komputer. Agen-agen ini akan mengumpulkan hasil dan mengkomunikasikannya ke komputer pengumpulan data pusat.

  • Karena profiler adalah objek COM yang dibuat dalam proses, setiap aplikasi yang diprofilkan akan memiliki salinan profiler sendiri. Oleh karena itu, satu instans profiler tidak perlu menangani data dari beberapa aplikasi. Namun, Anda harus menambahkan logika ke kode pengelogan profiler untuk mencegah penimpaan file log dari aplikasi lain yang diprofilkan.

Menginisialisasi Profiler

Ketika kedua variabel lingkungan memeriksa lulus, CLR membuat instans profiler dengan cara yang sama dengan fungsi COM CoCreateInstance . Profiler tidak dimuat melalui panggilan langsung ke CoCreateInstance. Oleh karena itu, panggilan ke CoInitialize, yang memerlukan pengaturan model utas, dihindari. CLR kemudian memanggil metode ICorProfilerCallback::Initialize di profiler. Tanda tangan metode ini adalah sebagai berikut.

HRESULT Initialize(IUnknown *pICorProfilerInfoUnk)

Profiler harus meminta pICorProfilerInfoUnk penunjuk antarmuka ICorProfilerInfo atau ICorProfilerInfo2 dan menyimpannya sehingga dapat meminta informasi lebih lanjut nanti selama pembuatan profil.

Mengatur Pemberitahuan Peristiwa

Profiler kemudian memanggil metode ICorProfilerInfo::SetEventMask untuk menentukan kategori pemberitahuan mana yang diminatinya. Misalnya, jika profiler hanya tertarik pada fungsi masukkan dan tinggalkan pemberitahuan dan pemberitahuan pengumpulan sampah, profiler menentukan hal berikut.

ICorProfilerInfo* pInfo;
pICorProfilerInfoUnk->QueryInterface(IID_ICorProfilerInfo, (void**)&pInfo);
pInfo->SetEventMask(COR_PRF_MONITOR_ENTERLEAVE | COR_PRF_MONITOR_GC)

Dengan mengatur mask pemberitahuan dengan cara ini, profiler dapat membatasi pemberitahuan mana yang diterimanya. Pendekatan ini membantu pengguna membangun profiler sederhana atau tujuan khusus. Ini juga mengurangi waktu CPU yang akan-mengirim pemberitahuan yang hanya akan diabaikan oleh profiler.

Peristiwa profiler tertentu tidak dapat diubah. Ini berarti bahwa segera setelah peristiwa ini diatur dalam ICorProfilerCallback::Initialize panggilan balik, peristiwa tersebut tidak dapat dinonaktifkan dan peristiwa baru tidak dapat diaktifkan. Upaya untuk mengubah peristiwa yang tidak dapat diubah ICorProfilerInfo::SetEventMask akan menghasilkan HRESULT yang gagal.

Membuat profil Layanan Windows

Membuat profil Layanan Windows seperti membuat profil aplikasi runtime bahasa umum. Kedua operasi pembuatan profil diaktifkan melalui variabel lingkungan. Karena Layanan Windows dimulai ketika sistem operasi dimulai, variabel lingkungan yang dibahas sebelumnya dalam topik ini harus sudah ada dan diatur ke nilai yang diperlukan sebelum sistem dimulai. Selain itu, DLL pembuatan profil harus sudah terdaftar pada sistem.

Setelah Anda mengatur variabel lingkungan COR_ENABLE_PROFILING dan COR_PROFILER dan mendaftarkan DLL profiler, Anda harus memulai ulang komputer target sehingga Layanan Windows dapat mendeteksi perubahan tersebut.

Perhatikan bahwa perubahan ini akan memungkinkan pembuatan profil berdasarkan sistem di seluruh sistem. Untuk mencegah setiap aplikasi terkelola yang kemudian berjalan agar tidak dibuat profilnya, Anda harus menghapus variabel lingkungan sistem setelah memulai ulang komputer target.

Teknik ini juga menyebabkan setiap proses CLR diprofilkan. Profiler harus menambahkan logika ke ICorProfilerCallback::Inisialisasi panggilan balik untuk mendeteksi apakah proses saat ini menarik. Jika tidak, profiler dapat gagal panggilan balik tanpa melakukan inisialisasi.

Lihat juga