Bagikan melalui


Mengukur performa aplikasi dengan menganalisis penggunaan CPU (C#, Visual Basic, C++, F#)

Temukan masalah performa saat Anda melakukan penelusuran kesalahan dengan alat diagnostik Penggunaan CPU yang terintegrasi dengan debugger. Anda juga dapat menganalisis penggunaan CPU tanpa debugger yang terpasang atau dengan menargetkan aplikasi yang sedang berjalan. Untuk informasi selengkapnya, lihat Menjalankan alat pemrofilan dengan atau tanpa penelusur kesalahan.

Saat debugger dijeda, alat Penggunaan CPU di jendela Alat Diagnostik mengumpulkan informasi tentang fungsi yang dijalankan di aplikasi Anda. Alat ini mencantumkan fungsi yang melakukan pekerjaan, dan menyediakan grafik garis waktu yang dapat Anda gunakan untuk fokus pada segmen tertentu dari sesi pengambilan sampel.

Penting

Alat Diagnostik terintegrasi debugger didukung untuk pengembangan .NET di Visual Studio, termasuk ASP.NET, ASP.NET Core, dan untuk pengembangan asli/C++. Diperlukan beban kerja Visual Studio yang sesuai. Windows 8 dan yang lebih baru diperlukan untuk menjalankan alat pemrofilan dengan penelusur kesalahan (jendela Alat Diagnostik).

Dalam tutorial ini, Anda akan:

  • Mengumpulkan data penggunaan CPU
  • Menganalisis data penggunaan CPU

Jika Penggunaan CPU tidak memberikan data yang Anda butuhkan, alat pembuatan profil lainnya di Profiler Performa memberikan berbagai jenis informasi yang mungkin berguna bagi Anda. Dalam banyak kasus, hambatan performa aplikasi Anda mungkin disebabkan oleh sesuatu selain CPU Anda, seperti memori, perenderan UI, atau waktu permintaan jaringan.

Langkah 1: Mengumpulkan data penggunaan CPU

  1. Buka proyek yang ingin Anda debug di Visual Studio dan atur titik henti di aplikasi Anda pada titik di mana Anda ingin memeriksa penggunaan CPU.

  2. Atur titik henti kedua di akhir fungsi atau wilayah kode yang ingin Anda analisis.

    Dengan mengatur dua titik henti, Anda dapat membatasi pengumpulan data ke bagian kode yang ingin Anda analisis.

  3. Jendela Alat Diagnostik muncul secara otomatis kecuali Anda telah menonaktifkannya. Untuk memunculkan jendela lagi, klik Debug>Windows>Tampilkan Alat Diagnostik.

  4. Anda dapat memilih apakah akan melihat Penggunaan CPU, Penggunaan Memori, atau keduanya, dengan pengaturan Pilih Alat pada toolbar. Jika Anda menjalankan Visual Studio Enterprise, Anda juga dapat mengaktifkan atau menonaktifkan IntelliTrace di Alat>Opsi>IntelliTrace.

    Screenshot that shows Diagnostics Tools.

    Screenshot that shows Diagnostics Tools.

    Kami terutama akan melihat penggunaan CPU, jadi pastikan Penggunaan CPU diaktifkan (diaktifkan secara default).

  5. Klik Debug>Mulai Penelusuran Kesalahan (atau Mulai pada toolbar, atau F5).

    Saat aplikasi selesai memuat, tampilan Ringkasan Alat Diagnostik muncul. Jika Anda perlu membuka jendela, klik Debug>Windows>Tampilkan Alat Diagnostik.

    Screenshot that shows Diagnostics Tools Summary Tab.

    Screenshot that shows Diagnostics Tools Summary Tab.

    Untuk informasi selengkapnya tentang peristiwa, lihat Menelusuri dan memfilter tab Peristiwa di jendela Alat Diagnostik.

  6. Jalankan skenario yang akan menyebabkan titik henti pertama Anda terkena.

  7. Saat debugger dijeda, aktifkan pengumpulan data Penggunaan CPU, lalu buka tab Penggunaan CPU.

    Screenshot that shows Diagnostics Tools enable CPU profiling.

    Screenshot that shows Diagnostics Tools enable CPU profiling.

    Saat Anda memilih Rekam Profil CPU, Visual Studio akan mulai merekam fungsi Anda dan berapa lama waktu yang dibutuhkan untuk menjalankannya. Anda hanya dapat melihat data yang dikumpulkan ini saat aplikasi Anda dihentikan pada titik henti.

  8. Tekan F5 untuk menjalankan aplikasi ke titik henti kedua Anda.

    Sekarang, Anda sekarang memiliki data performa untuk aplikasi Anda secara khusus untuk wilayah kode yang berjalan di antara dua titik henti.

    Profiler mulai menyiapkan data utas. Tunggu sampai selesai.

    Screenshot that shows Diagnostics Tools preparing threads.

    Screenshot that shows Diagnostics Tools preparing threads.

    Alat Penggunaan CPU menampilkan laporan di tab Penggunaan CPU.

    Screenshot that shows Diagnostics Tools CPU Usage Tab.

    Screenshot that shows Diagnostics Tools CPU Usage Tab.

  9. Jika Anda ingin memilih wilayah kode yang lebih spesifik untuk dianalisis, pilih wilayah di garis waktu CPU (harus merupakan wilayah yang menampilkan data pembuatan profil).

    Screenshot that shows Diagnostics Tools selecting a time segment.

    Screenshot that shows Diagnostics Tools selecting a time segment.

    Pada titik ini, Anda dapat mulai menganalisis data. Jika Anda mengalami masalah saat mengumpulkan atau menampilkan data, lihat Memecahkan masalah kesalahan pembuatan profil dan memperbaiki masalah.

    Tip

    Saat mencoba mengidentifikasi masalah performa, lakukan beberapa pengukuran. Performa secara alami bervariasi dari run-to-run, dan jalur kode biasanya dijalankan lebih lambat saat pertama kali dijalankan karena pekerjaan inisialisasi satu kali seperti memuat DLL, metode kompilasi JIT, dan menginisialisasi cache. Dengan melakukan beberapa pengukuran, Anda mendapatkan gambaran yang lebih baik tentang rentang dan median metrik yang ditampilkan, yang memungkinkan Anda membandingkan pertama kali versus performa kondisi stabil dari area kode.

Langkah 2: Menganalisis data penggunaan CPU

Sebaiknya Anda mulai menganalisis data Anda dengan memeriksa daftar fungsi di bawah Penggunaan CPU, mengidentifikasi fungsi yang paling berfungsi, lalu melihat lebih dekat satu per satu.

  1. Dalam daftar fungsi, periksa fungsi yang paling banyak berfungsi.

    Screenshot that shows Diagnostics Tools CPU Usage Function List.

    Screenshot that shows Diagnostics Tools CPU Usage Function List.

    Tip

    Fungsi dicantumkan dalam urutan dimulai dengan yang melakukan pekerjaan paling banyak (tidak dalam urutan panggilan). Ini membantu Anda dengan cepat mengidentifikasi fungsi yang paling lama berjalan.

  2. Dalam daftar fungsi, klik dua kali salah satu fungsi aplikasi Anda yang melakukan banyak pekerjaan.

    Saat Anda mengklik dua kali fungsi, tampilan Fungsi terbuka di panel kiri. Pilih Tampilan Penelepon/Callee dari menu drop-down.

    Screenshot that shows Diagnostics Tools Caller Callee View.

    Dalam tampilan ini, fungsi yang dipilih muncul di judul dan di kotak Fungsi Saat Ini (DoWork, dalam contoh ini). Fungsi yang memanggil fungsi saat ini ditampilkan di sebelah kiri di bawah Fungsi Panggilan, dan semua fungsi yang dipanggil oleh fungsi saat ini ditampilkan dalam kotak Fungsi yang Dipanggil di sebelah kanan. (Anda dapat memilih salah satu kotak untuk mengubah fungsi saat ini.)

    Tampilan ini menunjukkan total waktu (md) dan persentase waktu berjalan aplikasi secara keseluruhan yang telah diselesaikan oleh fungsi tersebut. Isi Fungsi juga menunjukkan kepada Anda jumlah total waktu (dan persentase waktu) yang dihabiskan dalam isi fungsi tidak termasuk waktu yang dihabiskan untuk melakukan panggilan dan memanggil fungsi.

    Saat Anda mengeklik dua kali suatu fungsi, tampilan Pemanggil/Penerima Panggilan akan terbuka di panel kiri.

    Screenshot that shows Diagnostics Tools Caller Callee View.

    Dalam tampilan ini, fungsi yang dipilih muncul di judul dan dalam kotak Fungsi Saat Ini (GetNumber, dalam contoh ini). Fungsi yang memanggil fungsi saat ini ditampilkan di sebelah kiri di bawah Fungsi Panggilan, dan semua fungsi yang dipanggil oleh fungsi saat ini ditampilkan dalam kotak Fungsi yang Dipanggil di sebelah kanan. (Anda dapat memilih salah satu kotak untuk mengubah fungsi saat ini.)

    Tampilan ini menunjukkan total waktu (md) dan persentase waktu berjalan aplikasi secara keseluruhan yang telah diselesaikan oleh fungsi tersebut. Isi Fungsi juga menunjukkan kepada Anda jumlah total waktu (dan persentase waktu) yang dihabiskan dalam isi fungsi tidak termasuk waktu yang dihabiskan untuk melakukan panggilan dan memanggil fungsi. (Dalam contoh ini, 2367 dari 2389 md digunakan dalam isi fungsi, dan 22 md tersisa digunakan dalam kode eksternal yang dipanggil oleh fungsi ini).

    Tip

    Nilai tinggi dalam Isi Fungsi dapat menunjukkan hambatan performa dalam fungsi itu sendiri.

  3. Untuk melihat tampilan tingkat yang lebih tinggi yang menunjukkan urutan pemanggilan fungsi, pilih Pohon Panggilan dari daftar drop-down di bagian atas panel.

    Setiap area bernomor dalam gambar berkaitan dengan langkah dalam prosedur.

    Diagnostics Tools Call Tree

    Gambar Deskripsi
    Step 1 Node tingkat atas di pohon panggilan Penggunaan CPU adalah node semu
    Step 2 Di sebagian besar aplikasi, saat opsi Tampilkan Kode Eksternal dinonaktifkan, node tingkat kedua adalah node [Kode Eksternal] yang berisi kode sistem dan kerangka kerja yang memulai dan menghentikan aplikasi, menggambar UI, mengontrol penjadwalan utas, dan menyediakan layanan tingkat rendah lainnya ke aplikasi.
    Step 3 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.
    Step 4 Node turunan dari suatu metode hanya berisi data untuk pemanggilan metode induk. Saat Tampilkan Kode Eksternal dinonaktifkan, metode aplikasi juga dapat berisi node [Kode Eksternal].

    Berikut adalah informasi selengkapnya tentang nilai kolom:

    • Total CPU menunjukkan berapa banyak pekerjaan yang dilakukan oleh fungsi tersebut dan fungsi apa pun yang dipanggil olehnya. Nilai total CPU yang tinggi menunjukkan fungsi yang paling mahal secara keseluruhan.

    • CPU Mandiri menunjukkan berapa banyak pekerjaan yang dilakukan oleh kode dalam isi fungsi, tidak termasuk pekerjaan yang dilakukan oleh fungsi yang dipanggil olehnya. Nilai CPU Mandiri yang tinggi dapat menunjukkan hambatan performa dalam fungsi itu sendiri.

    • Module Nama modul yang berisi fungsi, atau jumlah modul yang berisi fungsi dalam node [Kode Eksternal].

    Untuk melihat panggilan fungsi yang menggunakan persentase CPU tertinggi dalam tampilan hierarki panggilan, klik Perluas Hot Path.

    Screenshot that shows Diagnostics Tools Hot Path.

    Catatan

    Jika Anda melihat kode di hierarki panggilan yang ditandai sebagai kode "rusak" atau "tumpukan tidak dapat diteruskan", ini menunjukkan bahwa peristiwa Pelacakan Peristiwa untuk Windows (ETW) kemungkinan dibatalkan. Coba kumpulkan jejak yang sama untuk kedua kalinya untuk menyelesaikan masalah.

Menampilkan kode eksternal

Kode eksternal adalah fungsi dalam komponen sistem dan kerangka kerja yang dijalankan oleh kode yang Anda tulis. Kode eksternal mencakup fungsi yang memulai dan menghentikan aplikasi, menggambar UI, mengontrol utas, dan menyediakan layanan tingkat rendah lainnya ke aplikasi. Dalam kebanyakan kasus, Anda tidak akan tertarik dengan kode eksternal, sehingga alat Penggunaan CPU mengumpulkan fungsi eksternal dari metode pengguna ke dalam satu node [Kode Eksternal].

Jika Anda ingin menampilkan jalur panggilan kode eksternal, pilih Tampilkan Kode Eksternal dari daftar Tampilan filter lalu pilih Terapkan.

Screenshot that shows Choose Filter View, then Show External Code.

Perlu diketahui bahwa banyak rantai panggilan kode eksternal sangat berlapis, sehingga lebar kolom Nama Fungsi dapat melebihi lebar tampilan semua monitor komputer kecuali yang terbesar. Ketika ini terjadi, nama fungsi ditampilkan sebagai [...].

Gunakan kotak pencarian untuk menemukan node yang Anda cari, lalu gunakan bilah gulir horizontal untuk menampilkan data.

Tip

Jika Anda membuat profil kode eksternal yang memanggil fungsi Windows, Anda harus memastikan bahwa Anda memiliki file .pdb terbaru. Tanpa file-file ini, tampilan laporan Anda akan mencantumkan nama fungsi Windows yang samar dan sulit dipahami. Untuk informasi selengkapnya tentang cara memastikan bahwa Anda memiliki file yang diperlukan, lihat Menentukan simbol (.pdb) dan file sumber di debugger.

Langkah berikutnya

Dalam tutorial ini, Anda telah mempelajari bagaimana mengumpulkan dan menganalisis data penggunaan CPU. Jika Anda sudah menyelesaikan tur profiler, Anda mungkin ingin membaca tentang pendekatan umum untuk mengoptimalkan kode menggunakan alat pembuatan profil.

Dalam tutorial ini, Anda telah mempelajari cara mengumpulkan dan menganalisis data penggunaan CPU saat penelusuran kesalahan. Anda mungkin ingin mengetahui lebih lanjut tentang pembuatan profil rilis menggunakan Profiler Performa.