Menganalisis penggunaan memori tanpa penelusuran kesalahan di Performance Profiler (C#, Visual Basic, C++, F#)
Alat Penggunaan Memori memantau penggunaan memori aplikasi Anda. Anda dapat menggunakan alat ini untuk mempelajari efek memori real-time dari skenario yang Anda kembangkan secara aktif di Visual Studio. Anda dapat mengambil snapshot terperinci dari status memori aplikasi, dan membandingkan snapshot untuk menemukan akar penyebab masalah memori. Alat Penggunaan Memori didukung pada aplikasi .NET, ASP.NET, C++, atau mode campuran (.NET dan asli).
Alat Penggunaan Memori dapat berjalan dengan atau tanpa debugger. Dalam artikel ini, kami menunjukkan cara menggunakan alat Penggunaan Memori tanpa debugger di Visual Studio Performance Profiler, yang direkomendasikan untuk build rilis. Untuk informasi tentang memilih alat analisis memori terbaik untuk kebutuhan Anda, lihat Memilih alat analisis memori.
Sesi diagnostik Penggunaan Memori
Untuk memulai sesi diagnostik Penggunaan Memori:
Buka proyek di Visual Studio.
Alat Penggunaan Memori mendukung aplikasi .NET, ASP.NET, C++, atau mode campuran (.NET dan asli).
Di menu Debug, atur konfigurasi solusi ke Rilis dan pilih Local Windows Debugger (atau Komputer Lokal) sebagai target penyebaran.
Pada bilah menu, pilih Debug>Performance Profiler.
Di bawah Alat yang Tersedia, pilih Penggunaan Memori, lalu pilih Mulai.
Memantau penggunaan memori
Saat Anda memulai sesi diagnostik, aplikasi Anda dimulai, dan jendela Alat Diagnostik menampilkan grafik garis waktu penggunaan memori aplikasi Anda.
Grafik garis waktu menunjukkan fluktuasi memori saat aplikasi berjalan. Lonjakan grafik biasanya menunjukkan bahwa beberapa kode mengumpulkan atau membuat data, lalu membuangnya ketika pemrosesan selesai. Lonjakan besar menunjukkan area yang dapat Anda optimalkan. Perhatian utama adalah kenaikan konsumsi memori yang tidak dikembalikan. Ini mungkin menunjukkan penggunaan memori yang tidak efisien atau bahkan kebocoran memori.
Mengambil snapshot status memori aplikasi
Aplikasi menggunakan sejumlah besar objek, dan Anda mungkin ingin mengonsentrasikan analisis Anda pada satu skenario. Atau, Anda mungkin menemukan masalah memori untuk diselidiki. Anda dapat mengambil snapshot selama sesi diagnostik untuk menangkap penggunaan memori pada saat-saat tertentu. Ada baiknya untuk mendapatkan snapshot dasar aplikasi sebelum masalah memori muncul. Anda dapat mengambil snapshot lain setelah terjadinya masalah pertama, dan snapshot tambahan jika Anda dapat mengulangi skenario.
Untuk mengumpulkan snapshot, pilih Ambil snapshot saat Anda ingin mengambil data memori.
Menutup sesi diagnostik
Untuk menghentikan sesi pemantauan tanpa membuat laporan, cukup tutup jendela diagnostik. Untuk membuat laporan saat Anda selesai mengumpulkan atau telah mengambil snapshot, pilih Hentikan Koleksi.
Jika Anda mengalami masalah saat mengumpulkan atau menampilkan data, lihat Memecahkan masalah kesalahan pembuatan profil dan memperbaiki masalah.
Laporan Penggunaan Memori
Setelah Anda menghentikan pengumpulan data, alat Penggunaan Memori menghentikan aplikasi dan menampilkan halaman gambaran umum Penggunaan Memori.
Snapshot Penggunaan Memori
Angka-angka di panel Snapshot memperlihatkan objek dan byte dalam memori saat setiap snapshot diambil, dan perbedaan antara snapshot dan yang sebelumnya.
Angka tersebut adalah tautan yang membuka tampilan laporan Penggunaan Memori terperinci di jendela Visual Studio baru. Laporan detail snapshot menunjukkan jenis dan instans dalam satu snapshot. Laporan perbedaan snapshot (diff) membandingkan jenis dan instans dalam dua snapshot.
Gambar | Deskripsi |
---|---|
Jumlah total byte dalam memori saat snapshot diambil. Pilih tautan ini untuk menampilkan laporan detail snapshot yang diurutkan berdasarkan ukuran total instans jenis. | |
Jumlah total objek dalam memori saat snapshot diambil. Pilih tautan ini untuk menampilkan laporan detail snapshot yang diurutkan berdasarkan jumlah instans jenis. | |
Perbedaan antara ukuran total objek memori dalam snapshot ini dan snapshot sebelumnya. Angka positif berarti ukuran memori snapshot ini lebih besar dari yang sebelumnya, dan angka negatif berarti ukurannya lebih kecil. Garis besar berarti snapshot adalah yang pertama dalam sesi diagnostik. Tidak Ada Perbedaan berarti perbedaannya adalah nol. Pilih tautan ini untuk menampilkan laporan diff snapshot yang diurutkan berdasarkan perbedaan ukuran total instans jenis. | |
Perbedaan antara jumlah total objek memori dalam snapshot ini dan snapshot sebelumnya. Pilih tautan ini untuk menampilkan laporan diff snapshot. Ini diurutkan berdasarkan perbedaan dalam jumlah total instans jenis. |
Gambar | Deskripsi |
---|---|
Jumlah total objek dalam memori saat snapshot diambil. Pilih tautan ini untuk menampilkan laporan detail snapshot yang diurutkan berdasarkan jumlah instans jenis. | |
Perbedaan antara jumlah total objek memori dalam snapshot ini dan snapshot sebelumnya. Pilih tautan ini untuk menampilkan laporan diff snapshot yang diurutkan berdasarkan perbedaan jumlah total instans jenis. | |
Jumlah total byte dalam memori saat snapshot diambil. Pilih tautan ini untuk menampilkan laporan detail snapshot yang diurutkan berdasarkan ukuran total instans jenis. | |
Perbedaan antara ukuran total objek memori dalam snapshot ini dan snapshot sebelumnya. Angka positif berarti ukuran memori snapshot ini lebih besar dari yang sebelumnya, dan angka negatif berarti ukurannya lebih kecil. Garis besar berarti snapshot adalah yang pertama dalam sesi diagnostik. Tidak Ada Perbedaan berarti perbedaannya adalah nol. Pilih tautan ini untuk menampilkan laporan diff snapshot yang diurutkan berdasarkan perbedaan ukuran total instans jenis. |
Laporan snapshot Penggunaan Memori
Saat Anda memilih salah satu tautan snapshot di halaman gambaran umum Penggunaan Memori, laporan snapshot terbuka di halaman baru.
Jika Jenis Objek berwarna biru, Anda dapat memilihnya untuk menavigasi ke objek dalam kode sumber, di jendela terpisah.
Jenis yang tidak dapat Anda identifikasi atau yang keterlibatannya dalam kode Anda yang tidak Anda pahami mungkin adalah objek .NET, sistem operasi, atau kompilator. Alat Penggunaan Memori menampilkan objek ini jika terlibat dalam rantai kepemilikan objek Anda.
Dalam laporan snapshot:
Pohon Memori Terkelola menunjukkan jenis dan instans dalam laporan. Memilih jenis atau instans menampilkan pohon Jalur ke Akar dan Objek Yang Dirujuk untuk item yang dipilih.
Pohon Jalur ke Akar menunjukkan rantai objek yang mereferensikan jenis atau instans. Pengumpul sampah .NET membersihkan memori untuk objek hanya ketika semua referensi ke sana telah dirilis.
Pohon Jenis Yang Dirujuk atau Objek Yang Dirujuk menunjukkan objek yang dipilih jenis atau referensi instans.
Filter pohon laporan
Banyak jenis dalam aplikasi tidak diperlukan untuk pengembang aplikasi. Filter laporan snapshot dapat menyembunyikan sebagian besar jenis ini di Memori Terkelola dan pohon Jalur ke Akar.
Untuk memfilter pohon menurut nama jenis, masukkan nama dalam kotak Filter. Filter tidak peka huruf besar/kecil, dan mengenali string yang ditentukan di bagian mana pun dari nama jenis.
Pilih Ciutkan Objek Kecil di menu dropdown Filter untuk menyembunyikan jenis yang Ukurannya (Byte) kurang dari 0,5 persen dari total memori.
Pilih Hanya Kode Saya di menu dropdown Filter untuk menyembunyikan sebagian besar instans yang dihasilkan oleh kode eksternal. Jenis eksternal milik sistem operasi atau komponen kerangka kerja, atau dihasilkan oleh pengompilasi.
Laporan detail snapshot
Laporan detail snapshot menjelaskan satu snapshot dari sesi diagnostik. Untuk membuka laporan, pilih tautan ukuran atau objek di panel snapshot.
Kedua tautan membuka laporan yang sama. Satu-satunya perbedaan adalah urutan penyortiran awal pohon Memori Terkelola. Tautan ukuran mengurutkan laporan menurut kolom Ukuran Inklusif (Byte). Tautan objek mengurutkan laporan menurut kolom Hitung. Anda bisa mengubah kolom atau urutan pengurutan setelah laporan terbuka.
Pohon Memori Terkelola (Laporan detail snapshot)
Pohon Memori Terkelola mencantumkan jenis objek yang disimpan dalam memori. Perluas nama jenis untuk melihat 10 instans terbesar dari jenis tersebut, yang diurutkan menurut ukuran. Pilih jenis atau instans untuk menampilkan pohon Jalur ke Akar dan Objek Yang Dirujuk untuk item yang dipilih.
Pohon Memori Terkelola dalam laporan detail snapshot memiliki kolom berikut:
Nama | Deskripsi |
---|---|
Jenis Objek | Nama jenis atau instans objek. |
Hitung | Jumlah instans objek jenis. Hitungan selalu 1 untuk instans. |
Ukuran (Byte) | Untuk jenis, ukuran semua instans jenis dalam snapshot, lebih sedikit ukuran objek yang terkandung dalam instans. Misalnya, ukuran objek, lebih sedikit ukuran objek yang terkandung dalam instans. |
Ukuran inklusif (Byte) | Ukuran instans jenis, atau ukuran satu instans, termasuk ukuran objek yang terkandung. |
Modul | Modul yang berisi objek. |
Pohon Jalur ke Akar (Laporan detail snapshot)
Pohon Jalur ke Akar menunjukkan rantai objek yang mereferensikan jenis atau instans. Pengumpul sampah .NET membersihkan memori untuk objek hanya ketika semua referensi ke sana telah dirilis.
Untuk jenis di pohon Jalur ke Akar, jumlah objek yang menyimpan referensi ke jenis tersebut muncul di kolom Jumlah Referensi.
Jenis Referensi atau pohon Objek Yang Dirujuk (Laporan detail snapshot)
Pohon Jenis Yang Dirujuk atau Objek Yang Dirujuk menunjukkan objek yang dipilih jenis atau referensi instans.
Pohon Jenis yang Dirujuk dalam laporan detail snapshot memiliki kolom berikut. Pohon Objek yang Dirujuk tidak memiliki kolom Jumlah Referensi.
Nama | Deskripsi |
---|---|
Jenis Objek atau Instans | Nama jenis atau instans. |
Hitungan Referensi | Untuk jenis, jumlah instans objek jenis. |
Ukuran (Byte) | Untuk jenis, ukuran semua instans jenis, lebih sedikit ukuran objek yang terkandung dalam jenis. Misalnya, ukuran objek, lebih sedikit ukuran objek yang terkandung dalam objek. |
Ukuran inklusif (Byte) | Ukuran total instans jenis, atau ukuran instans, termasuk ukuran objek yang terkandung. |
Modul | Modul yang berisi objek. |
Laporan perbedaan snapshot (diff)
Laporan perbedaan snapshot (diff) menunjukkan perubahan antara snapshot utama dan snapshot sebelumnya. Untuk membuka laporan diff, pilih salah satu tautan perbedaan di panel snapshot.
Kedua tautan membuka laporan yang sama. Satu-satunya perbedaan adalah urutan awal pohon Memori Terkelola dalam laporan. Tautan ukuran mengurutkan laporan menurut kolom Diff Ukuran Inklusif (Byte). Tautan objek mengurutkan laporan menurut kolom Hitung Diff. Anda bisa mengubah kolom atau urutan pengurutan setelah laporan terbuka.
Pohon Memori Terkelola (Laporan diff snapshot)
Pohon Memori Terkelola mencantumkan jenis objek yang disimpan dalam memori. Anda dapat memperluas nama jenis untuk melihat 10 instans terbesar dari jenis tersebut, yang diurutkan menurut ukuran. Pilih jenis atau instans untuk menampilkan pohon Jalur ke Akar dan Objek Yang Dirujuk untuk item yang dipilih.
Pohon Memori Terkelola dalam laporan diff snapshot memiliki kolom berikut:
Nama | Deskripsi |
---|---|
Jenis Objek | Nama jenis atau instans objek. |
Hitung | Jumlah instans jenis dalam snapshot utama. Hitungan selalu 1 untuk instans. |
Hitung Diff | Untuk jenis, perbedaan jumlah instans jenis antara snapshot utama dan snapshot sebelumnya. Bidang kosong untuk instans. |
Ukuran (Byte) | Ukuran objek dalam snapshot utama, lebih sedikit ukuran objek dalam objek. Untuk jenis, Ukuran (Byte) dan Ukuran Inklusif (Byte) adalah total ukuran instans jenis. |
Total Diff Ukuran (Byte) | Untuk jenis, perbedaan ukuran total instans jenis antara snapshot utama dan snapshot sebelumnya, lebih sedikit ukuran objek dalam instans. Bidang kosong untuk instans. |
Ukuran inklusif (Byte) | Ukuran objek dalam snapshot utama, termasuk ukuran objek dalam objek. |
Diff Ukuran Inklusif (Byte) | Untuk jenis, perbedaan ukuran semua instans jenis antara snapshot utama dan snapshot sebelumnya, termasuk ukuran objek dalam objek. Bidang kosong untuk instans. |
Modul | Modul yang berisi objek. |
Jalur ke Pohon akar (Laporan diff snapshot)
Pohon Jalur ke Akar menunjukkan rantai objek yang mereferensikan jenis atau instans. Pengumpul sampah .NET membersihkan memori untuk objek hanya ketika semua referensi ke sana telah dirilis.
Untuk jenis di pohon Jalur ke Akar, jumlah objek yang menyimpan referensi ke jenis tersebut muncul di kolom Jumlah Referensi. Perbedaan jumlah dari snapshot sebelumnya ada di kolom Referensi Diff.
Jenis Referensi atau pohon Objek Yang Dirujuk (Laporan perbedaan snapshot)
Pohon Jenis Yang Dirujuk atau Objek Yang Dirujuk menunjukkan objek yang dipilih jenis atau referensi instans.
Pohon Jenis yang Dirujuk dalam laporan diff snapshot memiliki kolom berikut. Pohon Objek yang Dirujuk memiliki kolom Instans, Ukuran (Byte), Ukuran Inklusif (Byte), dan Modul.
Nama | Deskripsi |
---|---|
Jenis Objek atau Instans | Nama jenis atau instans objek. |
Hitungan Referensi | Jumlah instans jenis dalam snapshot utama. |
Diff Jumlah Referensi | Untuk jenis, perbedaan jumlah instans jenis antara snapshot utama dan snapshot sebelumnya. |
Ukuran (Byte) | Ukuran objek dalam snapshot utama, lebih sedikit ukuran objek dalam objek. Untuk jenis, Ukuran (Byte) dan Ukuran Inklusif (Byte) adalah total ukuran instans jenis. |
Total Diff Ukuran (Byte) | Untuk jenis, perbedaan ukuran total instans jenis antara snapshot utama dan snapshot sebelumnya, lebih sedikit ukuran objek dalam instans. |
Ukuran inklusif (Byte) | Ukuran objek dalam snapshot utama, termasuk ukuran objek dalam objek. |
Diff Ukuran Inklusif (Byte) | Untuk jenis, perbedaan ukuran semua instans jenis antara snapshot utama dan snapshot sebelumnya, termasuk ukuran objek dalam objek. |
Modul | Modul yang berisi objek. |
Laporan wawasan
Di Visual Studio 2022, alat Analisis Memori juga memberikan beberapa wawasan otomatis bawaan yang kuat untuk memori terkelola. Pilih tab Insight di laporan Jenis terkelola dan menampilkan wawasan otomatis yang berlaku seperti String duplikat, array Sparse, dan kebocoran Penanganan aktivitas. Untuk informasi selengkapnya, lihat Insight Penggunaan Memori.