Kinerja aplikasi dapat menjadi masalah penting bagi banyak bisnis. Lagi pula, biaya hosting server secara langsung memengaruhi laba Anda, jadi menggunakan alat profil kinerja untuk men-debug kode yang Anda jalankan dapat menghemat uang Anda.
Masalah apa yang harus dicari?
Sebuah “kemacetan” adalah setiap bagian lambat dari aplikasi Anda yang memperlambat sisa kode yang lebih cepat, seperti tutup botol air atau jalan sempit yang menghalangi lalu lintas. Kode apa pun yang Anda tulis cenderung memiliki hambatan di suatu tempat, dan apakah itu besar atau kecil, Anda dapat menggunakan alat profil kinerja untuk mengidentifikasinya.
Setiap program berbeda, tetapi banyak aplikasi akan mengalami banyak masalah yang sama:
- Fungsi dipanggil terlalu sering (di mana caching atau penjadwalan dapat mengurangi jumlah panggilan)
- Kode pemblokiran IO, biasanya bersamaan dengan akses disk tetapi penggunaan memori yang berlebihan.
- Loop besar dengan metode mahal.
- Waktu startup yang lama, terutama dalam bahasa yang dikompilasi JIT.
- Alokasi memori yang tidak perlu, terutama saat runtime dengan pengumpul sampah.
- Area yang akan mendapat manfaat dari paralelisasi atau pemrograman asinkron.
Anda harus memperhatikan semua ini saat memeriksa kode Anda di profiler. Bahkan jika aplikasi Anda tidak mengalami hambatan yang parah dan jelas, % peningkatan apa pun membantu aplikasi Anda berjalan lebih cepat dan lebih efisien, dan beberapa persen peningkatan kecepatan di sana-sini dapat bertambah seiring waktu.
Ada juga kemungkinan bahwa aplikasi Anda terhambat bukan oleh kode yang berjalan di server, tetapi oleh tempatnya di jaringan Anda secara keseluruhan. Misalnya, jika Anda memiliki aplikasi API yang terhubung ke database yang lambat, tidak peduli seberapa cepat web server, karena selalu menunggu hasil yang lambat. Profiler kinerja hanya akan membantu Anda men-debug masalah dengan kode Andabukan arsitektur jaringan Anda secara keseluruhan.
Bagaimana Cara Kerja Profil?
Alat profil kinerja berbeda dari alat debugging dalam beberapa cara. Alat debugging, seperti breakpoint dan inspeksi, digunakan oleh IDE untuk pengujian dan pengembangan pemecahan masalah. Profiler umumnya bekerja dengan asumsi bahwa Anda tidak tahu apa masalahnya, dan Anda ingin profil semua kode Anda untuk menemukannya. Profiler dilampirkan ke aplikasi Anda, dan menggunakan timer presisi tinggi untuk melacak fungsi mana yang membutuhkan waktu paling lama. Setelah berjalan beberapa saat, Anda akan memiliki cukup data untuk melacak penyebab masalah.
Sebagian besar profiler akan menampilkan data dalam tumpukan yang diurutkan berdasarkan waktu puncak konsumen. Grafik umum di sebagian besar profiler adalah grafik nyala—menampilkan perincian intuitif dari seluruh riwayat panggilan program.

Alat dan metode yang tepat yang Anda gunakan akan bervariasi tergantung pada bahasa atau waktu proses yang Anda buat, dan apakah Anda perlu membuat profil aplikasi di lingkungan produksi, tetapi ide umumnya sama.
Karena setiap profiler harus memiliki integrasi dengan kode yang sedang berjalan, Anda perlu mengunduh profiler untuk bahasa yang digunakan aplikasi Anda. Beberapa lebih mudah digunakan daripada yang lain, terutama untuk bahasa seperti C# dan Java di mana lebih mudah untuk menyuntikkan ke dalam aplikasi daripada bahasa yang dikompilasi.
Banyak IDE juga akan memiliki alat profil yang dibangun di atas alat debugging standar, yang juga dapat Anda gunakan. Visual Studio, misalnya, dapat membuat profil kinerja dan penggunaan memori di beberapa aplikasi.
Jika Anda memiliki gagasan tentang apa yang mungkin diperlukan, Anda selalu dapat menggunakan perpustakaan penghitung waktu stopwatch untuk menjalankan tolok ukur.

Misalnya, Benchmark.NET dapat menjalankan tes pada berbagai fungsi dengan akurasi yang sangat tinggi, dan biasanya digunakan untuk membandingkan berbagai algoritma satu sama lain. Anda juga dapat menggunakan yang sederhana Stopwatch mengelilingi kode yang ingin Anda tolok ukur.
Menggunakan Profiler Kinerja
Untuk panduan ini, kami akan menunjukkan cara menggunakan dotTrace, profiler kinerja untuk aplikasi .NET yang berfitur lengkap dan memiliki sebagian besar alat yang ditemukan di profiler lain. Kecuali Anda membuat profil kode C#, Anda mungkin akan menggunakan aplikasi yang berbeda, tetapi proses keseluruhannya harus serupa.
Setelah Anda membuka aplikasi, Anda akan dapat terhubung ke proses .NET yang sedang berjalan, atau mengatur konfigurasi run Anda sendiri sehingga Anda dapat meluncurkan aplikasi dari dotTrace. Meluncurkan aplikasi dari profiler bisa sangat berguna untuk men-debug waktu startup yang lambat.

Segera setelah Anda menjalankan aplikasi, itu mulai mengumpulkan data. Anda dapat menjalankannya selama yang Anda inginkan, cukup tekan “Ambil Snapshot dan Tunggu” untuk membuka analisis untuk periode waktu yang dikumpulkan.
Setelah dibuka, Anda akan melihat banyak grafik di sebelah tumpukan panggilan dan pohon panggilan, yang mungkin terlihat tidak terbaca. Jika Anda melihat banyak hal yang terkait dengan threading, locking, dan waiting, itu mungkin karena Anda perlu menempati “utas utama”.
Profiler menangkap semua utas, yang sebagian besar digunakan untuk tugas latar belakang yang akan menunggu lama. Meskipun ini bisa menjadi bukti masalah pemblokiran IO, ini sedikit lebih bernuansa daripada apa yang dilakukan profiler, dan itu benar-benar tergantung pada apa yang dilakukan utas.
dotTrace juga memiliki fitur untuk memfilter kode berdasarkan ruang kerja asalnya, menggunakan filter “Subsistem” di sebelah kiri. Kode sistem, kode asli, dan area laggy lainnya seperti refleksi, koleksi, string, dan LINQ, semuanya dapat dicari.
Di jendela utama, Anda dapat melihat grafik api. Ini menunjukkan seluruh perincian aplikasi Anda, dimulai dengan “Semua Panggilan” dan merinci waktu yang diperlukan untuk setiap tingkat fungsi untuk dijalankan. Beberapa tidak dapat diselesaikan, dan beberapa terlalu kecil untuk ditampilkan di sini, tetapi grafik ini dapat diperbesar pada fungsi apa pun untuk melihat perincian lebih dekat untuk tumpukan panggilan itu.
Fitur utama lainnya dari profil kinerja adalah Pohon Panggilan, yang menunjukkan perincian bersarang dari fungsi yang paling aktif, diurutkan berdasarkan waktu yang dibutuhkan untuk dijalankan. Di sini, dotTrace juga menampilkan persentase, yang mewakili porsi total waktu yang diambil oleh fungsi tertentu dan turunannya.
Waktu CPU yang dihabiskan untuk fungsi tidak selalu menjadi masalah, terutama untuk bahasa seperti C# dengan pengumpul sampah. dotTrace juga memantau penggunaan dan alokasi memori, dan dapat digunakan untuk menemukan apa yang memberi tekanan yang tidak perlu pada GC Anda.

