Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Dalam tutorial ini, Anda akan:
- Membuka cadangan memori
- Memilih dan menjalankan penganalisis terhadap cadangan
- Meninjau hasil penganalisis
- Menavigasi ke kode bermasalah
Dalam contoh yang dijelaskan dalam artikel ini, yang menjadi perhatian adalah bahwa aplikasi Anda tidak merespons permintaan secara tepat waktu.
Membuka cadangan memori di Visual Studio
Buka cadangan memori di Visual Studio dengan menggunakan perintah menu File > Buka > File dan pilih cadangan memori Anda.
Perhatikan pada halaman Ringkasan Cadangan Memori Tindakan baru yang disebut Jalankan Analisis Diagnostik.

Pilih tindakan ini untuk memulai debugger dan membuka halaman Analisis Diagnostik baru dengan daftar opsi penganalisis yang tersedia, yang diatur oleh gejala yang mendasar.
Memilih dan menjalankan penganalisis terhadap cadangan
Untuk menyelidiki gejala-gejala ini, opsi terbaik tersedia di bawah Responsivitas Proses karena paling cocok dengan masalah dalam contoh ini.

Klik tombol Analisis untuk memulai proses investigasi
Penganalisis akan menyajikan hasil berdasarkan kombinasi info proses dan data CLR yang diambil dalam cadangan memori.
Meninjau hasil penganalisis
Dalam hal ini, penganalisis telah menemukan dua kesalahan. Pilih hasil penganalisis untuk melihat Ringkasan Analisis dan Remediasi yang disarankan.

Ringkasan Analisis telah menyatakan bahwa "kumpulan utas CLR mengalami kelaparan". Informasi ini menunjukkan bahwa CLR saat ini telah menggunakan semua utas kumpulan utas yang tersedia, yang berarti layanan Anda tidak dapat menanggapi permintaan baru hingga utas dirilis.
Catatan
Remediasi dalam hal ini adalah "Jangan menunggu secara sinkron di Monitor, Peristiwa, Tugas, atau objek lain yang dapat memblokir utas Anda. Lihat apakah Anda dapat memperbarui metode menjadi asinkron.".
Menavigasi ke kode bermasalah
Tugas Saya selanjutnya adalah menemukan kode yang bermasalah.
Mengeklik tautan Tampilkan tumpukan panggilan Visual Studio akan segera beralih ke utas yang menunjukkan perilaku ini.
Jendela Tumpukan Panggilan akan menampilkan metode yang mungkin berpotensi dengan cepat membedakan antara kode saya (SyncOverAsyncExmple.) dari kode Kerangka Kerja (Sistem.).

Setiap bingkai tumpukan panggilan sesuai dengan metode dan dengan mengeklik dua kali pada bingkai tumpukan Visual Studio akan menavigasi ke kode yang mengarah langsung ke skenario ini pada utas ini.
Namun, dalam contoh ini, tidak ada simbol atau kode, pada halaman Simbol yang tidak dimuat, Anda dapat memilih opsi Dekompilasi Kode sumber.

Dalam sumber yang didekompresi di bawah ini terbukti bahwa Tugas asinkron (ConsumeThreadPoolThread) memanggil fungsi pemblokiran sinkron.
Catatan
Metode "DoSomething()" yang berisi metode WaitHandle.WaitOne, yang memblokir utas kumpulan utas saat ini hingga menerima sinyal.
Untuk meningkatkan daya tanggap aplikasi, penting untuk menghapus pemblokiran kode sinkron dari semua konteks asinkron.
