Bagikan melalui


Menyiapkan Lingkungan Pembuatan Profil

Catatan

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

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

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

  • COR_PROFILER: Jika pemeriksaan COR_ENABLE_PROFILING berhasil, CLR terhubung ke profiler yang memiliki CLSID atau ProgID ini, yang pasti telah 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.

Catatan

Dimulai dengan .NET Framework 4, profiler tidak harus terdaftar.

Catatan

Untuk menggunakan profiler .NET Framework versi 2.0, 3.0, dan 3.5 di versi .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 ruang lingkup pengaruhnya. Anda dapat mengatur variabel tersebut 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. (Variabel tersebut juga akan berlaku untuk aplikasi lain yang dimulai oleh aplikasi tersebut yang mewarisi lingkungan.)

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

  • Jika Anda mengatur variabel di tingkat pengguna, variabel tersebut akan berlaku untuk semua aplikasi yang Anda mulai dengan File Explorer. Jendela Perintah yang Anda buka setelah Anda mengatur variabel akan memiliki pengaturan lingkungan ini, dan begitu juga aplikasi apa pun yang Anda mulai dari jendela itu. 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 pada komputer itu. Jendela Perintah yang Anda buka di komputer itu akan memiliki pengaturan lingkungan ini, dan begitu juga aplikasi apa pun yang Anda mulai dari jendela itu. Hal ini berarti bahwa setiap proses yang terkelola di komputer itu akan dimulai dengan profiler Anda. 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, kemudian hidupkan ulang komputer Anda. Setelah menghidupkan ulang, variabel akan tersedia di seluruh sistem.

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

Pertimbangan Tambahan

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

  • Hanya satu profiler yang dapat membuat profil proses sekaligus di lingkungan tertentu. Anda dapat mendaftarkan dua profiler yang berbeda di lingkungan yang berbeda, tetapi masing-masing harus membuat profil proses terpisah. Profiler harus diterapkan sebagai DLL server COM dalam proses, yang dipetakan ke ruang alamat yang sama dengan proses yang sedang diprofilkan. Hal ini berarti bahwa profiler sedang 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 mereka sendiri. Oleh karena itu, satu instans profiler tidak harus menangani data dari beberapa aplikasi. Namun, Anda harus menambahkan logika ke kode pengelogan profiler untuk mencegah penimpaan file log dari aplikasi profil lainnya.

Menginisialisasi Profiler

Saat kedua pemeriksaan variabel lingkungan berhasil, CLR membuat instans profiler dengan cara yang sama dengan fungsi CoCreateInstance COM. 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 dari metode ini adalah sebagai berikut.

HRESULT Initialize(IUnknown *pICorProfilerInfoUnk)  

Profiler harus meminta pICorProfilerInfoUnk atas penunjuk antarmuka ICorProfilerInfo atau ICorProfilerInfo2 dan menyimpannya agar profiler 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 pemberitahuan masuk dan keluar fungsi serta pemberitahuan pengumpulan sampah, profiler tersebut menentukan hal berikut.

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

Dengan mengatur masker notifikasi dengan cara ini, profiler dapat membatasi pemberitahuan mana yang diterimanya. Pendekatan ini membantu pengguna membangun profiler sederhana atau khusus. Pendekatan ini juga mengurangi waktu CPU yang akan terbuang atas pengiriman pemberitahuan yang hanya akan diabaikan oleh profiler.

Peristiwa profiler tertentu tidak berubah. Hal ini berarti bahwa segera setelah peristiwa ini diatur dalam panggilan balik ICorProfilerCallback::Initialize, peristiwa tersebut tidak dapat dinonaktifkan dan peristiwa baru tidak dapat diaktifkan. Upaya untuk mengubah peristiwa yang tidak dapat diubah akan menghasilkan ICorProfilerInfo::SetEventMask mengembalikan 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 saat 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 di sistem.

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

Perhatikan bahwa perubahan ini akan memungkinkan pembuatan profil berdasarkan luas dari sistem. Untuk mencegah setiap aplikasi terkelola yang berjalan setelahnya agar tidak diprofilkan, Anda harus menghapus variabel lingkungan sistem setelah Anda menghidupkan ulang komputer target.

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

Lihat juga