Bagikan melalui


Menganalisis penggunaan memori dalam build rilis (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 sedang Anda kembangkan secara aktif di Visual Studio. Anda dapat mengambil rekam jepret terperinci dari status memori aplikasi, dan membandingkan rekam jepret 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 tersebut dapat dijalankan pada build rilis atau debug. Dalam artikel ini, kami menunjukkan cara menggunakan alat Penggunaan Memori pada Performance Profiler Visual Studio , yang direkomendasikan untuk versi rilis. Untuk informasi tentang memilih alat analisis memori terbaik untuk kebutuhan Anda, lihat Memilih alat analisis memori.

Untuk pengalaman terbaik dengan dokumentasi ini, pilih bahasa pengembangan atau runtime pilihan Anda dari daftar di bagian atas artikel.

Sesi diagnostik Penggunaan Memori

Untuk memulai sesi diagnostik Penggunaan Memori:

  1. Buka proyek di Visual Studio.

    Alat Penggunaan Memori mendukung aplikasi .NET, ASP.NET, C++, atau mode campuran (.NET dan asli).

  2. Di menu Debug, atur konfigurasi solusi ke Rilis dan pilih target penyebaran.

    Target penyebaran biasanya cocok dengan nama proyek, yang menunjukkan penyebaran lokal.

  3. Pada bilah menu, pilih Debug>Performance Profiler.

  4. Di bawah Alat yang Tersedia, pilih Penggunaan Memori, lalu pilih Mulai.

    ! [CATATAN] Untuk beberapa jenis proyek, seperti CMake, Anda harus mengatur target startup ke Executable. Untuk informasi selengkapnya, lihat Alat mana yang didukung untuk proyek saya?.

Memantau penggunaan memori

Saat Anda memulai sesi diagnostik, aplikasi Anda dimulai, dan jendela Alat Diagnostik menampilkan grafik garis waktu penggunaan memori aplikasi Anda.

Cuplikan layar jendela Alat Diagnostik di Profiler Performa Visual Studio memperlihatkan grafik garis waktu penggunaan memori aplikasi.

Grafik garis waktu menunjukkan fluktuasi memori saat aplikasi berjalan. Lonjakan dalam 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 meningkatnya konsumsi memori yang tidak dikembalikan. Ini mungkin menunjukkan penggunaan memori yang tidak efisien atau bahkan kebocoran memori.

Mengambil rekam jepret status memori aplikasi

Aplikasi menggunakan sejumlah besar objek, dan Anda mungkin ingin memkonsentrasikan analisis Anda pada satu skenario. Atau, Anda mungkin menemukan masalah memori yang perlu diselidiki. Anda dapat mengambil rekam jepret selama sesi diagnostik untuk menangkap penggunaan memori pada saat-saat tertentu. Ada baiknya untuk mendapatkan rekam jepret garis besar aplikasi sebelum masalah memori muncul. Anda dapat mengambil rekam jepret lain setelah terjadinya masalah pertama, dan rekam jepret tambahan jika Anda dapat mengulangi skenario.

Untuk mengumpulkan rekam jepret, pilih Ambil rekam jepret saat Anda ingin mengambil data memori.

Cuplikan layar mengambil rekam jepret.

Menutup sesi diagnostik

Untuk menghentikan sesi pemantauan tanpa membuat laporan, cukup tutup jendela diagnostik. Untuk membuat laporan setelah Anda selesai mengumpulkan atau mengambil rekam jepret, pilih Hentikan Koleksi.

Cuplikan layar penghentian pengumpulan.

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 ringkasan Penggunaan Memori.

Screenshot of the overview page in the Memory Usage tool in the Visual Studio Performance Profiler, showing a memory usage graph and two snapshot panes.Cuplikan layar halaman gambaran umum di alat Penggunaan Memori di Visual Studio Performance Profiler, memperlihatkan grafik penggunaan memori dan dua panel rekam jepret.Memory Usage overview page halaman gambaran umum Penggunaan Memori

Rekam jepret Penggunaan Memori

Angka di panel Snapshot memperlihatkan objek dan byte dalam memori saat setiap cuplikan diambil, dan perbedaan antara cuplikan dan yang sebelumnya.

Angka adalah tautan yang membuka tampilan laporan penggunaan memori terperinci di jendela Visual Studio baru. Laporan detail cuplikan menunjukkan jenis dan kejadian dalam satu cuplikan. Laporan perbedaan rekam jepret (diff) membandingkan jenis dan instans dalam dua rekam jepret.

Cuplikan layar tautan tampilan Rekam Jepret

Untuk C++, kolom Objects (Diff) dinamai Allocations (Diff).

Gambar Deskripsi
Langkah 1 Jumlah total objek dalam memori saat rekam jepret diambil. Pilih tautan ini untuk menampilkan laporan detail rekam jepret yang diurutkan menurut jumlah instans jenis.
Langkah 2 Perbedaan antara jumlah total objek memori dalam rekam jepret ini dan rekam jepret sebelumnya. Pilih tautan ini untuk menampilkan laporan perbedaan snapshot yang diatur menurut perbedaan jumlah total jenis instance.
Langkah 3 Jumlah total byte dalam memori saat rekam jepret diambil. Pilih tautan ini untuk menampilkan laporan detail rekam jepret yang diurutkan menurut ukuran total instans jenis.
Langkah 4 Perbedaan antara ukuran total objek memori dalam rekam jepret ini dan rekam jepret sebelumnya. Angka positif berarti ukuran memori rekam jepret ini lebih besar dari yang sebelumnya, dan angka negatif berarti ukurannya lebih kecil. Baseline berarti rekam jepret adalah yang pertama dalam sesi diagnostik. Tidak Ada Perbedaan berarti perbedaannya adalah nol. Pilih tautan ini untuk menampilkan laporan perbedaan cuplikan yang diurutkan berdasarkan perbedaan ukuran total dari instans jenis.

Laporan tipe terkendali

Pilih tautan saat ini dari sel Objek (Diff) dalam tabel ringkasan Penggunaan Memori.

Cuplikan layar laporan jenis terkelola.

Nota

Untuk kode .NET, ikon Lihat Instans (Ikon instans di kolom Jenis Objek) hanya tersedia saat menggunakan alat Penggunaan Memori yang terintegrasi dengan debugger atau ketika Anda membuka snapshot heap dan memilih Debug Managed Memory .

Panel atas menampilkan jumlah dan ukuran tipe data dalam cuplikan, termasuk ukuran semua objek yang dirujuk oleh tipe data (Ukuran Inklusif).

Pohon Jalur ke Akar di panel bawah menampilkan objek yang mereferensi tipe yang dipilih di panel atas. Pengumpul sampah .NET membersihkan memori objek hanya setelah tipe terakhir yang mereferensikannya telah dirilis. Untuk informasi selengkapnya tentang menggunakan pohon Paths to Root, lihat Menganalisis jalur panas ke root.

Pohon Tipe Referensi menampilkan referensi yang dipegang oleh tipe yang dipilih di panel atas.

Cuplikan layar laporan Objek Yang Dirujuk.

Filter hirarki laporan

Banyak jenis elemen dalam aplikasi tidak diperlukan bagi pengembang aplikasi untuk menangani masalah memori. Filter laporan rekam jepret dapat menyembunyikan sebagian besar jenis ini di Memori Terkelola dan di pohon Jalur ke Root.

opsi pengurutan dan penyaringan

  • Untuk memfilter pohon menurut nama jenis, masukkan nama dalam kotak Filter. Filter tidak memperhatikan besar kecilnya huruf, dan mengenali teks yang ditentukan di bagian mana pun dari nama jenis.

  • Pilih Tampilkan 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 pengkompilasi.

  • Pilih Ciutkan Objek Kecil di menu dropdown Filter untuk menyembunyikan jenis Ukuran (Byte) kurang dari 0,5 persen dari total memori.

Laporan jenis bawaan

Pilih tautan saat ini dari sel Alokasi (Diff) atau Ukuran Timbunan (Diff) dalam tabel ringkasan Penggunaan Memori dari jendela Alat Diagnostik.

Tampilan Jenis menampilkan jumlah dan ukuran jenis dalam rekam jepret.

  • Pilih ikon Tampilkan Instans di samping jenis yang dipilih untuk menampilkan informasi tentang objek jenis yang dipilih dalam rekam jepret.

    Tampilan Instans menampilkan setiap instans dari jenis yang dipilih. Memilih instans menampilkan tumpukan panggilan yang menghasilkan pembuatan instans di panel Allocation Call Stack. (Informasi ini hanya tersedia saat debugging.)

    Cuplikan layar tampilan Instances dan panel Tumpukan Panggilan Alokasi.

  • Pilih Tumpukan untuk melihat tumpukan alokasi untuk jenis yang telah dipilih.

    Cuplikan layar tampilan Tumpukan.

Wawasan Penggunaan Memori

Untuk memori terkelola, alat Analisis Memori juga memberikan beberapa wawasan otomatis bawaan yang kuat. Pilih tab Wawasan dalam laporan Jenis-Jenis yang Dikelola dan ini menunjukkan wawasan otomatis yang berlaku seperti String duplikat, Array jarang, dan Kebocoran penangan Acara.

Tampilan wawasan di alat Penggunaan Memori.

Bagian String Duplikat memperlihatkan daftar string yang dialokasikan beberapa kali pada heap. Selain itu, bagian ini menunjukkan total memori yang terbuang, yaitu , (jumlah instans - 1) kali ukuran string.

Bagian Sparse Arrays menunjukkan array yang sebagian besar diisi dengan elemen nol, yang dapat tidak efisien dalam hal performa dan penggunaan memori. Alat analisis memori akan secara otomatis mendeteksi array ini dan menunjukkan kepada Anda berapa banyak memori yang terbuang karena nilai nol ini.

Bagian Event Handler Leaks, tersedia di Visual Studio 2022 versi 17.9 Pratinjau 1, menunjukkan potensi kebocoran memori yang dapat terjadi ketika satu objek berlangganan pada peristiwa objek lain. Jika penerbit acara lebih lama hidup daripada pelanggan, pelanggan tetap hidup, bahkan jika tidak ada referensi lain untuknya. Ini dapat menyebabkan kebocoran memori, di mana memori yang tidak digunakan tidak dibebaskan dengan benar, menyebabkan aplikasi menggunakan semakin banyak memori dari waktu ke waktu.

Jenis tertentu diketahui memiliki bidang yang dapat dibaca untuk menentukan ukuran memori asli yang mereka pegang. Tab Insights menunjukkan simpul memori tiruan dalam grafik objek, yang dipertahankan oleh objek induknya sehingga antarmuka pengguna akan mengenalinya dan menampilkan ukurannya serta grafik referensinya.

Cuplikan layar dari tampilan wawasan asli pada alat Penggunaan Memori. alat Penggunaan Memori

Laporan Perubahan (Diff)

  • Pilih tautan ubah di sel panel rekam jepret di halaman gambaran umum Penggunaan Memori.

    Cuplikan layar Pilih tautan ganti dalam sel.

  • Pilih cuplikan di daftar laporan terkelola atau asli yang dibandingkan dengan .

    Cuplikan layar Pilih cuplikan dari daftar Bandingkan.

Laporan perubahan menambahkan kolom (ditandai dengan (Diff) ) ke laporan dasar yang memperlihatkan perbedaan antara nilai rekam jepret dasar dan rekam jepret perbandingan. Berikut adalah bagaimana tampilan laporan perbedaan Tampilan Jenis Asli:

Cuplikan Layar Tampilan Perbedaan Jenis Asli.

Panel atas menampilkan jumlah dan ukuran tipe data dalam cuplikan, termasuk ukuran semua objek yang dirujuk oleh tipe data (Ukuran Inklusif).