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 Visual Studio menunjukkan waktu komputasi aktif CPU dan persentase yang dihabiskan untuk menjalankan kode dalam C++, C#/Visual Basic.
Alat Penggunaan CPU dapat membantu Anda:
Mendiagnosis kinerja lambat atau proses yang terhenti dalam basis kode tim Anda. Alat ini dapat membantu Anda mendiagnosis masalah dengan kode produksi tim Anda. Ini memberikan wawasan otomatis dan berbagai tampilan data Anda sehingga Anda dapat menganalisis dan mendiagnosis masalah performa.
Mengidentifikasi masalah performa dalam skenario DevOps Misalnya, alat ini dapat membantu ketika pelanggan melaporkan bahwa beberapa permintaan atau pesanan tidak masuk ke situs web ritel selama musim sibuk. Seringkali, masalahnya sedang dalam produksi, dan sulit untuk men-debug pada saat itu, tetapi alat ini dapat membantu Anda menangkap 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 Anda sehingga Anda dapat mengambil langkah-langkah berikutnya untuk memperbaiki masalah.
Periksa pemanfaatan CPU yang tinggi 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 sangat membantu untuk sesi pelacakan lokal dan produksi. Anda dapat menjalankan alat Penggunaan CPU dengan menggunakan pintasan keyboard, Alt+F2, lalu memilih Penggunaan CPU, atau dengan membuka rekaman yang sudah dikumpulkan menggunakan alat seperti dotnet-trace atau dotnet-monitor. (Untuk kode produksi .NET, ini kemungkinan besar adalah cara Anda akan mengumpulkan pelacakan.)
Anda dapat menjalankan alat Penggunaan CPU pada proyek Visual Studio yang terbuka, pada aplikasi Microsoft Store yang diinstal, atau dilampirkan ke aplikasi atau proses yang sedang berjalan. Anda dapat menjalankan alat Penggunaan CPU pada build rilis atau debug. Untuk informasi selengkapnya, lihat Menjalankan alat pembuatan profil pada build rilis atau debug.
Instruksi berikut menunjukkan cara menggunakan alat Penggunaan CPU tanpa debugger, menggunakan Visual Studio Performance Profiler. Contohnya menggunakan build Rilis pada komputer lokal. Build rilis memberikan tampilan terbaik dari performa sebenarnya dari aplikasi. 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 Jauh.
Mengumpulkan data pemanfaatan CPU
Dalam proyek Visual Studio, atur konfigurasi solusi ke Rilis dan pilih Windows Debugger Lokal (atau Komputer Lokal) sebagai target penyebaran.
Pilih Debug>Performance Profiler.
Di bawah Alat yang tersedia, pilih Penggunaan CPU, lalu pilih Mulai.
Jika Anda mengaktifkan opsi Mulai dengan pengumpulan dijeda sebelum memulai profiler, data tidak akan dikumpulkan hingga Anda memilih tombol Record dalam tampilan sesi diagnostik.
Nota
Untuk informasi selengkapnya tentang cara membuat alat lebih efisien, lihat Mengoptimalkan pengaturan Profiler.
Setelah aplikasi dimulai, sesi diagnostik dimulai dan menampilkan data pemanfaatan CPU. Setelah selesai mengumpulkan data, pilih Hentikan Koleksi.
pengumpulan data Penggunaan CPU
pengumpulan data Penggunaan CPU
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 dropdown Filter untuk memilih atau membatalkan pilihan utas yang akan ditampilkan, dan gunakan kotak Pencarian untuk mencari utas atau simpul 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 dipanggilnya 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 informasi CPU
Jika ada wawasan yang muncul di bagian Top Insights, gunakan tautan yang disediakan untuk mendapatkan informasi lebih lanjut tentang masalah yang teridentifikasi. 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 informasi selengkapnya, lihat wawasan CPU.
Menganalisis pemanfaatan CPU
Untuk menganalisis laporan Penggunaan CPU, klik Buka detail, atau klik salah satu fungsi teratas untuk membuka tampilan Functions.
Laporan ini menyediakan tampilan data diagnostik yang berbeda:
Tampilkan | Deskripsi |
---|---|
Penelepon/penerima panggilan | Tampilan terperinci waktu CPU untuk fungsi tertentu, fungsi yang memanggilnya, dan fungsi yang dipanggilnya. Data performa dikumpulkan untuk periode pengumpulan data. Anda dapat memilih fungsi panggilan dan memanggil fungsi untuk melintasi jalur panggilan. |
Pohon panggilan | Tampilan hierarkis jalur panggilan fungsi. Digunakan untuk mengidentifikasi jalur panggilan yang membutuhkan waktu CPU terbanyak (jalur panas). |
Modul | Tampilan waktu CPU yang dihabiskan dalam modul individual, dikumpulkan selama periode pengumpulan data. Digunakan untuk mengidentifikasi modul yang mungkin menjadi hambatan performa karena kombinasi jumlah panggilan tinggi dan/atau masalah performa. |
Fungsi | Tampilan waktu CPU yang dihabiskan dalam fungsi individual, dikumpulkan selama periode pengumpulan data. Digunakan untuk mengidentifikasi fungsi yang mungkin menjadi hambatan performa karena kombinasi jumlah panggilan tinggi dan/atau masalah performa. |
Grafik Api | Tampilan hierarkis jalur panggilan fungsi dalam visualisasi grafik api. Digunakan untuk mengidentifikasi jalur panggilan yang membutuhkan waktu CPU terbanyak (jalur panas). |
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 atau kolom pengurutan dengan memilih judul kolom. Anda dapat mengeklik dua kali pada fungsi yang Anda minati, dan Anda akan melihat kode sumber fungsi tersebut serta sorotan 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 seberapa banyak data yang ditampilkan oleh metode tersebut untuk mengetahui apakah kode pihak ketiga atau pustaka runtime menyebabkan titik akhir Anda menjadi lambat atau banyak mengonsumsi sumber daya.
Untuk informasi selengkapnya tentang menggunakan grafik Api, lihat Mengidentifikasi jalur panas dengan Flame Graph.
Pohon panggilan Penggunaan CPU
Untuk melihat pohon panggilan, pilih simpul induk dalam laporan. Secara bawaan, halaman Penggunaan CPU terbuka ke tampilan Pemanggil/Penerima Panggilan. Di menu dropdown Tampilan Saat Ini, pilih Pohon Panggilan.
Anda dapat mengklik tombol Perluas Hot Path dan Tampilkan Hot Path 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, simpul tingkat kedua adalah simpul [Kode Eksternal]. Simpul berisi sistem dan kode kerangka kerja yang memulai dan menghentikan aplikasi, menampilkan UI, mengontrol penjadwalan utas, dan menyediakan layanan tingkat rendah lainnya untuk aplikasi. |
![]() |
Anak-anak simpul tingkat kedua adalah metode kode pengguna dan rutinitas asinkron yang dipanggil atau dibuat oleh sistem tingkat kedua dan kode kerangka kerja. |
![]() |
Simpul anak dari suatu metode hanya memiliki data untuk panggilan dari metode induknya. 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 menggabungkan fungsi eksternal dari suatu metode pengguna menjadi satu simpul [Panggilan Eksternal].
Untuk melihat jalur panggilan kode eksternal, pada halaman ringkasan laporan utama (panel kanan), batalkan pilihan Perlihatkan Hanya Kode Saya dari menu dropdown Pengaturan, lalu pilih Terapkan. (Dropdown Pengaturan tersedia di halaman ringkasan laporan utama, bukan di halaman 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 metode pengguna ke dalam satu simpul [Kode Eksternal].
Untuk menampilkan jalur panggilan kode eksternal, pada halaman laporan diagnostik utama (panel kanan), pilih Perlihatkan Kode Eksternal dari menu dropdown Filter, lalu pilih Terapkan. Tampilan Pohon Panggilan dari halaman Penggunaan CPU kemudian memperluas panggilan kode eksternal. (Menu dropdown Filter tersedia di bagian halaman diagnostik utama, bukan tampilan terperinci.)
Saat Anda menonaktifkan Tampilkan Hanya Kode Saya, tampilan Pohon Panggilan pada halaman Penggunaan CPU akan memperluas panggilan kode eksternal.
Banyak rantai panggilan kode eksternal disarangkan secara mendalam, sehingga lebar rantai dapat melebihi lebar tampilan kolom Nama Fungsi. 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 mouse ke atas baris yang dipilih atau gunakan bilah gulir horizontal untuk melihat data.
Fungsi asinkron di pohon panggilan penggunaan CPU
Ketika kompilator menemukan metode asinkron, ia 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, pengkompilasi 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 [Kode Eksternal] simpul tepat di bawah simpul atas pohon.
Dalam contoh berikut, dua node pertama di bawah [External Code] adalah metode yang dihasilkan kompilator dari kelas komputer status. Node ketiga adalah panggilan ke metode asli.
Cuplikan layar yang memperlihatkan simpul Asinkron.Asynchronous node simpul asinkron
Perluas metode yang dihasilkan untuk menunjukkan apa yang terjadi:
simpul asinkron yang diperluas
simpul asinkron yang diperluas
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
memperlihatkan aktivitas dari tugas-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 (.NET saja).
Mengumpulkan data penggunaan CPU.
Buka tampilan fungsi, lalu pastikan kolom jumlah panggilan ditampilkan.
Jika Anda tidak melihat kolom, klik kanan judul kolom untuk memilih kolom yang terlihat.