Bagikan melalui


Menggunakan Fungsi Registri untuk Mengonsumsi Data Penghitung

Gunakan fungsi registri untuk mengumpulkan data performa dari kunci registri khusus HKEY_PERFORMANCE_DATA .

Data performa sebenarnya tidak disimpan dalam registri. Memanggil fungsi registri menyebabkan sistem mengumpulkan data dari penyedia data performa yang sesuai.

Catatan

Anda biasanya tidak boleh menggunakan fungsi registri untuk mengonsumsi data penghitung. Sebagai gantinya, Anda harus menggunakan fungsi Performance Data Helper (PDH). Fungsi PDH lebih mudah digunakan dan menghindari banyak masalah performa dan keandalan yang dapat terjadi melalui penggunaan fungsi registri yang salah.

Catatan

Anda tidak dapat menggunakan fungsi registri jika Anda menulis aplikasi Windows OneCore. Sebagai gantinya, gunakan fungsi Konsumen PerfLib V2.

Fungsi registri adalah API tingkat rendah untuk mengumpulkan data dari penyedia V1. Fungsi registri juga mendukung pengumpulan data dari penyedia V2 melalui lapisan terjemahan yang memanggil ke fungsi Konsumen V2.

Untuk mendapatkan data performa dari sistem lokal, panggil fungsi RegQueryValueEx . Gunakan HKEY_PERFORMANCE_DATA sebagai kunci. Panggilan pertama membuka kunci. Anda tidak perlu membuka kunci secara eksplisit terlebih dahulu.

Untuk mendapatkan data performa dari sistem jarak jauh, panggil fungsi RegConnectRegistry . Gunakan nama komputer sistem jarak jauh dan gunakan HKEY_PERFORMANCE_DATA sebagai kunci. Panggilan ini mengambil kunci yang mewakili data performa untuk sistem jarak jauh. Gunakan kunci ini daripada HKEY_PERFORMANCE_DATA kunci untuk mengambil data.

Pastikan untuk menggunakan fungsi RegCloseKey untuk menutup handel ke kunci ketika Anda selesai mendapatkan data performa. Ini penting untuk kasus lokal dan jarak jauh:

  • RegCloseKey(HKEY_PERFORMANCE_DATA) tidak benar-benar menutup handel registri, tetapi menghapus semua data yang di-cache dan membebaskan DLL performa yang dimuat.
  • RegCloseKey(hkeyRemotePerformanceData) menutup handel ke registri komputer jarak jauh.

Penting

Jangan panggil RegCloseKey(HKEY_PERFORMANCE_DATA) selama DLL_PROCESS_DETACH.

Anda menggunakan lpValueName parameter fungsi RegQueryValueEx untuk menunjukkan informasi yang akan diambil. Tabel berikut ini mencantumkan nilai yang bisa Anda tentukan untuk lpValueName. Perhatikan bahwa string nilai tidak peka huruf besar/kecil.

Nilai Deskripsi
Global Mengambil data performa untuk semua objek performa yang terdaftar di komputer kecuali yang disertakan dalam Costly kategori.
OLD_Global Windows Vista dan yang lebih baru: Mengambil data performa untuk semua objek performa V1 yang terdaftar di komputer kecuali untuk yang disertakan Costly dalam kategori. Gunakan ini alih-alih Global untuk menghindari pengumpulan data penyedia V2 yang tidak perlu ketika Anda tahu bahwa data yang menarik berasal dari penyedia V1.
n1 n2 ... Mengambil data performa untuk satu atau beberapa objek performa. Tentukan indeks desimal yang terkait dengan setiap objek yang ingin Anda ambil dalam daftar yang dipisahkan spasi. Misalnya, jika Anda ingin mengambil objek Sistem dan Memori dan Anda telah menentukan bahwa indeks string nama yang sesuai adalah 2 dan 4, tentukan string "2 4". Perhatikan bahwa kueri dapat mengembalikan jumlah objek yang berbeda dari yang Anda minta. Ini dapat terjadi jika objek yang ditentukan tidak tersedia, jika objek yang ditentukan tergantung pada jenis objek lain, atau jika penyedia mengembalikan data yang tidak diminta secara langsung. Misalnya, utas bergantung pada proses, jadi jika Anda meminta data dari Thread objek, hasilnya akan menyertakan data dari Process objek.
Counter n Mengambil string nama untuk pengidentifikasi bahasa yang ditentukan, misalnya bahasa Inggris untuk Counter 9. Gunakan string nama yang dikembalikan untuk menemukan indeks yang sesuai dengan nama tertentu atau untuk menemukan nama yang sesuai dengan indeks tertentu. Lihat Mengambil Nama Penghitung dan Teks Bantuan untuk detailnya. Perhatikan bahwa daftar yang dikembalikan mencakup nama objek (counterset) dan nama penghitung -- tidak ada cara sederhana untuk menentukan apakah nama adalah nama objek atau nama penghitung.
Help n Mengambil string bantuan untuk pengidentifikasi bahasa yang ditentukan, misalnya bahasa Inggris untuk Help 9. Gunakan string bantuan yang dikembalikan untuk menemukan deskripsi yang sesuai dengan indeks bantuan objek (counterset) atau penghitung. Lihat Mengambil Nama Penghitung dan Teks Bantuan untuk detailnya.
Costly Usang: Mengambil data performa untuk jenis objek yang datanya mahal untuk dikumpulkan dalam hal waktu prosesor atau penggunaan memori. Koleksi ini mungkin memakan waktu beberapa menit pada mesin yang sangat dimuat. Anda harus melakukan pengumpulan pada utas pekerja jika aplikasi Anda perlu merespons pengguna selama pengumpulan data ini.
MetadataGlobal Windows 10 20H1 dan yang lebih baru: Mengambil metadata untuk semua objek performa yang terdaftar di komputer kecuali untuk yang disertakan dalam Costly kategori.
OLD_MetadataGlobal Windows 10 20H1 dan yang lebih baru: Mengambil metadata untuk semua objek performa V1 yang terdaftar di komputer kecuali untuk yang disertakan dalam Costly kategori.
MetadataCostly Windows 10 20H1 dan yang lebih baru: Mengambil metadata untuk objek performa yang mahal.
OLD_MetadataCostly Windows 10 20H1 dan yang lebih baru: Mengambil metadata untuk objek performa V1 yang mahal.

Untuk detail tentang format data performa yang dikembalikan registri, lihat Format Data Performa.

Untuk contoh yang mendapatkan nama dan deskripsi penghitung terdaftar di komputer, lihat Mengambil Nama Penghitung dan Teks Bantuan.

Untuk contoh yang mengakses komponen data performa, lihat Menampilkan Nama Objek, Instans, dan Penghitung.

Untuk contoh yang mengambil, menghitung, dan mencetak nilai penghitung, lihat Mengambil Data Penghitung dan Menghitung Nilai Penghitung.

Koleksi Metadata

Windows 10 20H1 menambahkan dukungan untuk operasi pengumpulan khusus metadata. Operasi ini ditujukan untuk digunakan saat membuat daftar objek performa dan penghitung yang tersedia di komputer.

  • Koleksi khusus metadata dapat lebih cepat daripada pengumpulan data lengkap yang sesuai karena dapat melewati pengumpulan data instans dari objek yang mendukung pengumpulan khusus metadata.
  • Koleksi khusus metadata menggunakan lebih sedikit memori daripada pengumpulan data penuh yang sesuai karena tidak memerlukan ruang untuk mengembalikan data instans dari objek yang mendukung pengumpulan khusus metadata.
  • Koleksi khusus metadata lebih lengkap daripada pengumpulan data lengkap yang sesuai karena mengembalikan daftar penghitung yang tersedia meskipun tidak ada instans objek yang mendukung pengumpulan khusus metadata.

Tip

Penggunaan pengumpulan khusus metadata yang sesuai sangat penting saat mengumpulkan data dari server dengan banyak proses atau utas. Koleksi normal Global harus mengumpulkan dan mengembalikan informasi tentang setiap proses dan utas pada sistem, sementara MetadataGlobal koleksi tidak perlu mengumpulkan informasi proses atau utas.

Fungsi Performance Data Helper (PDH) secara otomatis menggunakan koleksi khusus metadata saat menentukan kumpulan objek performa yang tersedia di komputer.

Dukungan sistem operasi untuk operasi khusus metadata ditunjukkan oleh nilai bukan nol dalam HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\Supports Metadata nilai registri. Jika nilai ini tidak ada atau diatur ke 0, gunakan pengumpulan data lengkap (misalnya Global) alih-alih koleksi khusus metadata (misalnya MetadataGlobal).

Tidak semua objek performa mendukung koleksi khusus metadata. Ketika Anda meminta MetadataGlobal koleksi, Windows akan memeriksa setiap objek performa untuk dukungan khusus metadata (ditunjukkan oleh nilai bukan nol dalam HKLM\SYSTEM\CurrentControlSet\Services\<ServiceName>\Performance\Collect Supports Metadata nilai registri). Jika objek performa tidak mendukung pengumpulan khusus metadata, Windows akan melakukan pengumpulan data normal dari objek . Jika objek performa mendukung koleksi khusus metadata, Windows akan melakukan koleksi khusus metadata dari objek. Data yang dikembalikan kepada Anda untuk kueri khusus metadata kemudian akan berisi PERF_OBJECT_TYPE blok dari kumpulan data lengkap dan metadata saja. PERF_OBJECT_TYPE Blok mungkin berisi atau menghilangkan informasi instans, tergantung pada apakah blok dikumpulkan dari penyedia yang tidak atau tidak mendukung kueri khusus metadata.

Data yang dikembalikan dari koleksi khusus metadata sama dengan data dari koleksi normal kecuali:

  • Bidang NumInstancesPERF_OBJECT_TYPE struktur akan berupa PERF_METADATA_MULTIPLE_INSTANCES (menunjukkan bahwa objek mendukung 0 atau lebih instans bernama) atau PERF_METADATA_NO_INSTANCES (menunjukkan bahwa objek selalu memiliki 1 instans yang tidak disebutkan namanya).
  • Tidak akan ada PERF_INSTANCE_DEFINITION blok setelah PERF_OBJECT_TYPE struct.

Perflib

Kunci HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib registri mendukung beberapa DWORD nilai yang terkait dengan pengumpulan penghitung kinerja. Ini biasanya harus tidak diatur untuk perilaku default, tetapi dapat dikonfigurasi oleh administrator sesuai kebutuhan untuk skenario tertentu.

  • Configuration Flags: Defaultnya adalah 0. Dapat diatur ke kombinasi bendera berikut untuk mengaktifkan perilaku khusus:
    • 0x01: Jangan menguji plugin untuk kesalahan penyelarasan buffer data. Secara default, sistem memvalidasi penyelarasan buffer plugin.
    • 0x02: Jangan secara otomatis menonaktifkan plugin. Secara default, sistem menonaktifkan plugin yang crash atau menunjukkan perilaku yang salah.
    • 0x04: Jangan validasi integritas buffer plugin. Secara default, sistem memeriksa overrun buffer plugin.
    • 0x08: Jangan periksa batas waktu plugin. Secara default, sistem memeriksa plugin macet.
  • Disable Performance Counters: Defaultnya adalah 0. Jika diatur ke 1, pengumpulan penghitung kinerja V1 akan dinonaktifkan untuk sistem.
  • ExtCounterTestLevel: Defaultnya adalah 4. Mengontrol berapa banyak validasi yang dilakukan sistem untuk melindungi dari perilaku plugin yang salah. Lihat PM_COLLECT_PROC untuk detailnya.