Saya ingin mendapatkan keseluruhan penggunaan CPU total untuk aplikasi dalam C #. Saya telah menemukan banyak cara untuk menggali sifat-sifat proses, tetapi saya hanya ingin penggunaan CPU dari proses, dan total CPU seperti yang Anda dapatkan di TaskManager.
Bagaimana aku melakukan itu?
Jawaban:
Anda dapat menggunakan kelas PerformanceCounter dari System.Diagnostics .
Inisialisasi seperti ini:
Konsumsi seperti ini:
sumber
Sedikit lebih banyak dari yang dibutuhkan kembali tetapi saya menggunakan kode timer tambahan untuk melacak dan mengingatkan jika penggunaan CPU 90% atau lebih tinggi untuk periode 1 menit atau lebih lama.
sumber
cpuCounter.NextValue
mengembalikan afloat
. Jadi mengapa menugaskannya kedynamic
? Lalu mengapa mengembalikannyadynamic
sebagaiobject
? Lalu mengapa mencoba untuk menetapkanobject
keint
dalam barisint cpuPercent = getCPUCounter()
? (Kode itu tidak akan dikompilasi.)Setelah menghabiskan waktu membaca beberapa utas berbeda yang sepertinya cukup rumit, saya membuat ini. Saya membutuhkannya untuk mesin 8 inti di mana saya ingin memonitor SQL server. Untuk kode di bawah ini maka saya meneruskan "sqlservr" sebagai appName.
Tampaknya mengukur dengan benar% dari CPU yang digunakan oleh SQL pada server 8 core saya.
sumber
done
true? Kecuali saya telah melewatkan sesuatu, ini tampaknya menjadi loop tanpa akhir:while(!done){...}
Tidak apa-apa, saya mengerti! Terima kasih atas bantuan Anda!
Berikut adalah kode untuk melakukannya:
sumber
Anda dapat menggunakan WMI untuk mendapatkan informasi persentase CPU. Anda bahkan dapat masuk ke komputer jarak jauh jika Anda memiliki izin yang benar. Lihatlah http://www.csharphelp.com/archives2/archive334.html untuk mendapatkan gagasan tentang apa yang dapat Anda capai.
Juga membantu mungkin referensi MSDN untuk namespace Win32_Process .
Lihat juga contoh CodeProject Cara: (Hampir) Semuanya Dalam WMI melalui C # .
sumber
CMS benar, tetapi juga jika Anda menggunakan server explorer di studio visual dan bermain-main dengan tab penghitung kinerja, maka Anda dapat mengetahui cara mendapatkan banyak metrik yang bermanfaat.
sumber
Ini sepertinya bekerja untuk saya, contoh menunggu sampai prosesor mencapai persentase tertentu
sumber
Kelas ini secara otomatis polling penghitung setiap 1 detik dan juga aman thread:
sumber
System.DateTime
sebenarnya merupakan tipe nilai 8 byte yang berarti bahwa penugasan ke suatuDateTime
variabel bukan atom. Kode ini tidak aman untuk platform 32 bit.Saya tidak suka harus menambahkan di kios 1 detik untuk semua
PerformanceCounter
solusi. Sebaliknya saya memilih untuk menggunakanWMI
solusi. Alasan 1 detik menunggu / kios ada adalah untuk memungkinkan pembacaan menjadi akurat saat menggunakan aPerformanceCounter
. Namun jika Anda sering memanggil metode ini dan menyegarkan informasi ini, saya sarankan untuk tidak terus-menerus harus menunda itu ... bahkan jika berpikir untuk melakukan proses async untuk mendapatkannya.Saya mulai dengan cuplikan dari sini Mengembalikan penggunaan CPU di WMI menggunakan C # dan menambahkan penjelasan lengkap tentang solusi pada posting blog saya di bawah ini:
Dapatkan Penggunaan CPU Di Seluruh Core Di C # Menggunakan WMI
sumber
Informasi asli di tautan ini https://gavindraper.com/2011/03/01/retrieving-accurate-cpu-usage-in-c/
sumber