Menganalisis performa dengan menggunakan pembuatan profil CPU di Profiler Performa (C#, Visual Basic, C++, F#)
Cara yang baik untuk mulai menyelidiki masalah performa di aplikasi Anda adalah dengan memahami pemanfaatan CPU-nya menggunakan profiler CPU. Alat performa Penggunaan CPU menunjukkan waktu komputasi aktif CPU dan persentase yang dihabiskan untuk mengeksekusi kode di C++, C#/Visual Basic.
Alat Penggunaan CPU dapat membantu Anda:
Diagnosis pelambatan atau proses yang macet di basis kode tim Anda. Alat ini dapat membantu Anda mendiagnosis masalah dengan kode produksi tim Anda. Alat ini memberikan wawasan otomatis dan berbagai tampilan data Anda sehingga Anda dapat menganalisis dan mendiagnosis masalah performa.
Identifikasi masalah performa dalam skenario DevOps, seperti ketika pelanggan melaporkan bahwa beberapa permintaan atau pesanan tidak masuk ke situs web ritel selama musim sibuk. Sering kali, masalahnya sedang dalam produksi, dan sulit untuk men-debug pada saat itu, tetapi alat ini dapat membantu Anda mendapatkan informasi dan bukti masalah yang cukup. Setelah mengumpulkan file pelacakan, analisis dapat dengan cepat membantu Anda memahami potensi penyebab dan memberikan saran dalam konteks kode sehingga Anda dapat mengambil langkah-langkah berikutnya untuk memperbaiki masalah.
Jika masalah latensi Anda tidak berada dalam permintaan API, maka Anda dapat memeriksa pemanfaatan CPU yang tinggi dan masalah terkait lainnya dengan alat Penggunaan CPU. Alat Penggunaan CPU dapat membantu Anda mengidentifikasi hambatan sehingga Anda dapat mempersempit tempat untuk mengoptimalkan.
Alat Penggunaan CPU berguna untuk sesi pelacakan lokal dan produksi. Alat Penggunaan CPU juga dapat dimulai dengan menggunakan pintasan keyboard, Alt+F2, lalu memilih Penggunaan CPU, atau dengan membuka jejak yang sudah dikumpulkan menggunakan alat seperti dotnet-trace atau dotnet-monitor. (Untuk kode produksi .NET, ini kemungkinan besar bagaimana Anda akan mengumpulkan jejak.)
Alat Penggunaan CPU dapat berjalan pada proyek Visual Studio terbuka, pada aplikasi Microsoft Store yang diinstal, atau dilampirkan ke aplikasi atau proses yang sedang berjalan. Anda dapat menjalankan alat Penggunaan CPU dengan atau tanpa penelusuran kesalahan. Untuk informasi selengkapnya, lihat Menjalankan alat pemrofilan dengan atau tanpa penelusur kesalahan.
Instruksi berikut menunjukkan cara menggunakan alat Penggunaan CPU tanpa debugger, menggunakan Profiler Performa Visual Studio. Contohnya menggunakan build Rilis pada komputer lokal. Build Rilis memberikan tampilan terbaik dari performa aplikasi aktual. Untuk tutorial yang menunjukkan cara meningkatkan performa menggunakan alat Penggunaan CPU, lihat Studi kasus: Panduan pemula untuk mengoptimalkan kode.
Biasanya, komputer lokal paling baik mereplikasi eksekusi aplikasi yang diinstal. Untuk mengumpulkan data dari perangkat jarak jauh, jalankan aplikasi langsung di perangkat, bukan melalui Koneksi Desktop Jarak Jauh.
Mengumpulkan data pemanfaatan CPU
Dalam proyek Visual Studio, atur konfigurasi solusi ke Rilis dan pilih Debugger Windows Lokal (atau Komputer Lokal) sebagai target penyebaran.
Pilih Debug>Profiler Performa.
Di bawah Alat yang tersedia, pilih Penggunaan CPU, lalu pilih Mulai.
Jika Anda mengaktifkan opsi Mulai dengan koleksi yang dijeda sebelum memulai profiler, data tidak akan dikumpulkan hingga Anda memilih tombol Rekam dalam tampilan sesi diagnostik.
Catatan
Untuk informasi selengkapnya tentang cara membuat alat lebih efisien, lihat Mengoptimalkan pengaturan Pembuat profil.
Setelah aplikasi dimulai, sesi diagnostik dimulai dan menampilkan data pemanfaatan CPU. Setelah selesai mengumpulkan data, pilih Hentikan Koleksi.
Alat Penggunaan CPU menganalisis data dan menampilkan laporan. Jika Anda mengalami masalah saat mengumpulkan atau menampilkan data, lihat Memecahkan masalah kesalahan pembuatan profil dan memperbaiki masalah.
Gunakan menu drop-down Filter untuk memilih atau membatalkan pilihan utas yang akan ditampilkan, dan gunakan kotak Pencarian untuk mencari utas atau node tertentu.
Kolom data pemanfaatan CPU
Nama | Deskripsi |
---|---|
Total CPU [unit, %] | Milidetik waktu komputasi CPU dan persentase CPU yang digunakan oleh panggilan ke fungsi, dan fungsi yang dipanggil oleh fungsi, dalam rentang waktu yang dipilih. Ini berbeda dari grafik garis waktu Pemanfaatan CPU, yang membandingkan total aktivitas CPU dalam rentang waktu dengan total CPU yang tersedia. |
CPU mandiri [unit, %] | Milidetik waktu komputasi CPU dan persentase CPU yang digunakan oleh panggilan ke fungsi dalam rentang waktu yang dipilih, tidak termasuk fungsi yang dipanggil oleh fungsi. |
Modul | Dalam beberapa tampilan, kolom Modul ditampilkan, yang menunjukkan nama modul yang berisi fungsi. |
Menganalisis wawasan CPU
Jika ada wawasan yang muncul di bagian Wawasan Teratas, gunakan tautan yang disediakan untuk mendapatkan informasi selengkapnya tentang masalah yang diidentifikasi. Selain itu, jika Anda menggunakan Copilot, tombol Ask Copilot akan membuka jendela obrolan Copilot, dan Copilot akan memberikan saran berdasarkan kode Anda dan masalah yang diidentifikasi.
Untuk menganalisis wawasan teratas, fungsi teratas, dan jalur panas, lihat wawasan CPU.
Menganalisis pemanfaatan CPU
Untuk menganalisis laporan Penggunaan CPU, klik Buka detail, atau klik salah satu fungsi teratas untuk membuka tampilan Fungsi .
Laporan ini menyediakan tampilan data diagnostik yang berbeda:
- Penelepon/penerima panggilan
- Pohon panggilan
- Modul
- Fungsi
- Grafik api
Untuk menganalisis laporan, klik Buat laporan terperinci.
Laporan ini menyediakan tampilan data diagnostik yang berbeda:
- Penelepon/penerima panggilan
- Pohon panggilan
Dalam semua tampilan kecuali Penelepon/penerima panggilan, laporan diagnostik diurutkan menurut Total CPU, dari tertinggi hingga terendah. Ubah urutan pengurutan atau kolom pengurutan dengan memilih header kolom. Anda dapat mengeklik dua kali pada fungsi yang Anda minati, dan Anda akan melihat sumber untuk fungsi serta menyoroti yang menunjukkan di mana waktu dihabiskan dalam fungsi tersebut. Tabel memperlihatkan kolom dengan data seperti waktu yang dihabiskan dalam fungsi, termasuk fungsi yang disebut (Total CPU), dan kolom kedua yang memperlihatkan waktu yang dihabiskan dalam fungsi, tidak termasuk fungsi yang disebut (CPU Mandiri).
Data ini dapat membantu Anda menilai apakah fungsi itu sendiri merupakan penyempitan performa. Tentukan berapa banyak data yang ditampilkan metode untuk melihat apakah kode pihak ketiga atau pustaka runtime adalah alasan titik akhir Anda lambat atau konsumsi sumber daya berat.
Untuk informasi selengkapnya tentang menggunakan grafik Api, lihat Mengidentifikasi jalur panas dengan Grafik Api.
Pohon panggilan Penggunaan CPU
Untuk melihat pohon panggilan, pilih node induk dalam laporan. Secara default, halaman Penggunaan CPU terbuka ke tampilan Penelepon/Callee . Di menu dropdown Tampilan Saat Ini, pilih Pohon Panggilan.
Anda dapat mengklik tombol Perluas Jalur Panas dan Tampilkan Jalur Panas untuk melihat panggilan fungsi yang menggunakan persentase tertinggi CPU dalam tampilan pohon panggilan.
Struktur pohon panggilan
Gambar | Deskripsi |
---|---|
Simpul tingkat atas dalam pohon panggilan Penggunaan CPU, mewakili aplikasi. | |
Di sebagian besar aplikasi, saat opsi Tampilkan Kode Eksternal dinonaktifkan, node tingkat kedua adalah node [Kode Eksternal ]. Node berisi sistem dan kode kerangka kerja yang memulai dan menghentikan aplikasi, menggambar UI, mengontrol penjadwalan utas, dan menyediakan layanan tingkat rendah lainnya ke aplikasi. | |
Elemen turunan dari node tingkat kedua adalah metode kode pengguna dan rutinitas asinkron yang dipanggil atau dibuat oleh sistem tingkat kedua dan kode kerangka kerja. | |
Node turunan dari suatu metode hanya memiliki data untuk pemanggilan metode induk. Saat Tampilkan Kode Eksternal dinonaktifkan, metode aplikasi juga dapat berisi node [Kode Eksternal]. |
Kode eksternal
Fungsi sistem dan kerangka kerja yang dijalankan oleh kode Anda disebut kode eksternal. Fungsi kode eksternal memulai dan menghentikan aplikasi, menggambar UI, mengontrol utas, dan menyediakan layanan tingkat rendah lainnya ke aplikasi. Dalam kebanyakan kasus, Anda tidak tertarik dengan kode eksternal, sehingga pohon panggilan Penggunaan CPU mengumpulkan fungsi eksternal metode pengguna ke dalam satu simpul [Panggilan Eksternal] .
Untuk menampilkan jalur panggilan kode eksternal, pada halaman ringkasan laporan utama (panel kanan), pilih Perlihatkan Hanya Kode Saya dari menu dropdown Pengaturan , lalu pilih Terapkan. Tampilan Pohon Panggilan dari halaman Penggunaan CPU lalu memperluas panggilan kode eksternal. (Dropdown pengaturan tersedia di halaman ringkasan laporan utama, bukan tampilan terperinci.)
Fungsi sistem dan kerangka kerja yang dijalankan oleh kode Anda disebut kode eksternal. Fungsi kode eksternal memulai dan menghentikan aplikasi, menggambar UI, mengontrol utas, dan menyediakan layanan tingkat rendah lainnya ke aplikasi. Dalam kebanyakan kasus, Anda tidak tertarik dengan kode eksternal, sehingga pohon panggilan Penggunaan CPU mengumpulkan fungsi eksternal dari metode pengguna ke dalam satu node [Kode Eksternal].
Untuk menampilkan jalur panggilan kode eksternal, pada halaman laporan diagnostik utama (panel kanan), pilih Tampilkan Kode Eksternal dari menu dropdown Filter, lalu pilih Terapkan. Tampilan Pohon Panggilan dari halaman Penggunaan CPU lalu memperluas panggilan kode eksternal. (Menu drop-down Filter tersedia di halaman diagnostik utama, bukan tampilan terperinci.)
Banyak rantai panggilan kode eksternal disarangkan secara mendalam, sehingga lebar rantai dapat melebihi lebar tampilan kolom Nama Fungsi. Nama-nama fungsi kemudian muncul seperti yang ditunjukkan pada gambar berikut.
Banyak rantai panggilan kode eksternal disarangkan secara mendalam, sehingga lebar rantai dapat melebihi lebar tampilan kolom Nama Fungsi. Nama fungsi kemudian muncul sebagai ....
Untuk menemukan nama fungsi yang Anda cari, gunakan kotak pencarian. Arahkan kursor ke garis yang dipilih atau gunakan bilah gulir horizontal untuk melihat data.
Fungsi asinkron di pohon panggilan penggunaan CPU
Ketika menemukan metode asinkron, kompilator membuat kelas tersembunyi untuk mengontrol eksekusi metode. Secara konseptual, kelasnya adalah mesin status. Kelas ini memiliki fungsi yang dihasilkan kompilator yang secara asinkron memanggil metode asli, dan panggilan balik, penjadwal, dan iterator yang diperlukan untuk menjalankannya. Ketika metode induk memanggil metode asli, kompilator menghapus metode dari konteks eksekusi induk, dan menjalankan metode kelas tersembunyi dalam konteks sistem dan kode kerangka kerja yang mengontrol eksekusi aplikasi. Metode asinkron sering kali, tetapi tidak selalu, dijalankan pada satu atau beberapa utas yang berbeda. Kode ini muncul di pohon panggilan Penggunaan CPU sebagai turunan dari node [Kode Eksternal] tepat di bawah node atas pohon.
Dalam contoh berikut, dua node pertama di bawah [Kode Eksternal] adalah metode yang dihasilkan kompilator dari kelas komputer status. Node ketiga adalah panggilan ke metode asli.
Perluas metode yang dihasilkan untuk menunjukkan apa yang terjadi:
MainPage::GetMaxNumberAsyncButton_Click
hanya mengelola daftar nilai tugas, menghitung hasil maksimum, dan menampilkan output.MainPage+<GetMaxNumberAsyncButton_Click>d__3::MoveNext
menunjukkan aktivitas yang diperlukan untuk menjadwalkan dan meluncurkan 48 tugas yang membungkus panggilan keGetNumberAsync
.MainPage::<GetNumberAsync>b__b
menunjukkan aktivitas tugas yang memanggilGetNumber
.
Mengumpulkan jumlah panggilan (.NET)
Jika Anda ingin melihat jumlah panggilan dalam tampilan Functions, Anda dapat mengaktifkan pengaturan sebelum memulai profiler. Pengaturan ini didukung untuk jenis proyek .NET dan memerlukan peluncuran proses di bawah profiler. Skenario lampirkan tidak didukung.
Pilih ikon Pengaturan untuk Penggunaan CPU di Profiler Performa.
Aktifkan opsi Kumpulkan jumlah panggilan (hanya.NET).
Mengumpulkan data penggunaan CPU.
Buka tampilan Fungsi, lalu pastikan kolom Jumlah panggilan diatur ke terlihat.
Jika Anda tidak melihat kolom, klik kanan judul kolom untuk memilih kolom yang terlihat.