Bagikan melalui


Meningkatkan performa aplikasi dengan mengurangi penggunaan memori dan ruang disk

Panduan ini akan menunjukkan cara meningkatkan performa aplikasi Windows Anda dengan dua cara utama:

Meminimalkan penggunaan memori

Ada berbagai cara untuk meminimalkan jumlah memori yang digunakan aplikasi Windows, Anda dapat:

  • Mengurangi penggunaan memori latar depan
  • Meminimalkan pekerjaan latar belakang
  • Rilis sumber daya saat berada di latar belakang
  • Pastikan aplikasi Anda tidak membocorkan memori

Untuk meminimalkan penggunaan memori dengan tepat, pertama-tama penting untuk memahami:

Setelah Anda memiliki jejak sistem untuk dianalisis, kami akan merekomendasikan panduan untuk Menerapkan analisis jejak Anda untuk mengurangi penggunaan memori.

Set kerja, memori dinamis, dan alokasi virtual

Sekumpulan aplikasi yang berfungsi – kumpulan halaman di ruang alamat virtualnya yang saat ini berada dalam memori – adalah salah satu ukuran penggunaan memori aplikasi.

Jumlah memori yang digunakan aplikasi berdampak pada performa runtime-nya, serta responsivitas sistem secara keseluruhan. Meminimalkan penggunaan memori akan membantu aplikasi untuk berkinerja lebih baik dengan mengurangi biaya CPU yang terkait dengan mengakses lebih banyak memori. Penggunaan memori yang lebih rendah juga membantu responsivitas sistem, dan pengalaman pengguna aplikasi secara umum, karena aplikasi tidak akhirnya menggusur konten memori lainnya.

Perpindahan memori dapat terjadi saat sistem mencoba mempertahankan konten dalam memori yang diakses baru-baru ini dan, jika perlu, akan memangkas dan memangkas konten page-out yang digunakan sebelumnya. Ketika pengguna beralih kembali ke shell, atau aplikasi lain, dan data yang diperlukan tidak berada dalam memori, data harus dibaca dari disk. Pengguna kemungkinan akan melihat perlambatan karena proses ini.

Ada dua potongan kunci ke memori yang digunakan oleh aplikasi: 1) memori dinamis, dan 2) memori yang didukung file. Penggunaan memori yang didukung file berasal dari biner dan file data, seperti database, yang digunakan oleh aplikasi. Ini biasanya bukan potongan signifikan dari penggunaan memori aplikasi dan sering kali konstanta. (Pengecualian adalah aplikasi pemrosesan data, kompilasi kode, dll.) Sumber penggunaan memori yang lebih signifikan dan di mana manifes kebocoran adalah memori dinamis.

Memori dinamis sesuai dengan memori virtual yang dialokasikan oleh aplikasi menggunakan rutinitas alokasi memori. Tidak seperti memori yang didukung file, yang bertahan di seluruh reboot sistem, memori dinamis hanya ada untuk masa pakai aplikasi. Memori dinamis adalah sumber penggunaan memori yang umumnya signifikan dan di mana memori bocor manifes.

Rutinitas Alokasi Virtual (VirtualAlloc) menangani permintaan alokasi memori dari aplikasi Windows yang independen dari rutinitas lapisan aplikasi yang digunakan untuk alokasi memori. Meskipun tidak semua memori yang dialokasikan oleh aplikasi mungkin tinggal dalam memori sepanjang waktu, menganalisis alokasi tersebut memberikan cara yang konsisten untuk memahami penggunaan memori aplikasi.

Untuk memahami penggunaan memori aplikasi Anda dan menemukan tempat untuk melakukan penyempurnaan, sebaiknya ambil jejak VirtualAllocation seperti yang dijelaskan di bawah ini.

Mengambil jejak sistem untuk menganalisis penggunaan memori

Merekam aktivitas perangkat selama jangka waktu tertentu dikenal sebagai pelacakan sistem. Pelacakan sistem menghasilkan file pelacakan yang dapat digunakan untuk menghasilkan laporan dan membantu Anda mengidentifikasi cara meningkatkan performa aplikasi Anda.

Jejak dapat bervariasi panjangnya:

  • Jejak yang berjalan singkat dapat digunakan untuk menangkap peluncuran aplikasi. Ini dapat mencakup transisi aplikasi Anda ke status tidak aktif, di mana jendela aplikasi diminimalkan atau jendela aplikasi ditutup saat proses aplikasi berlanjut.
  • Jejak yang berjalan lama, biasanya beberapa menit dalam durasi, berguna dalam mendiagnosis kebocoran memori. Jika penggunaan memori terus tren naik dari waktu ke waktu, ini biasanya menunjukkan kebocoran.

Ada beberapa alat yang tersedia untuk memantau penggunaan memori, termasuk:

Untuk tujuan artikel ini, kami akan fokus menggunakan Penganalisis Kinerja Windows. Untuk mempelajari selengkapnya tentang memilih alat untuk membuat profil performa aplikasi Anda, lihat Memilih di antara Visual Studio Performance Profiler, Windows Performance Toolkit, dan PerfView.

Untuk mengambil jejak:

  1. Buka baris perintah (PowerShell atau Prompt Perintah) dalam mode administrator. (Jika tidak berjalan dalam mode admin, Anda mungkin menerima kode kesalahan: 0xc5585011, "Gagal mengaktifkan kebijakan ke performa sistem profil.")

  2. Masukkan perintah: wpr -start VirtualAllocation -filemode

  3. Jalankan skenario yang Sedang Anda selidiki. (Meluncurkan aplikasi Anda, misalnya.)

  4. Masukkan perintah: wpr -stop Trace.etl

Menganalisis jejak sistem

Untuk menemukan fungsi aplikasi mana yang telah mengalokasikan memori yang mungkin dapat Anda kurangi, Anda sekarang perlu menganalisis jejak sistem yang diambil. Untuk menganalisis jejak:

  1. Buka jejak menggunakan Windows Penganalisis Kinerja, dengan memasukkan perintah:wpa.exe Trace.etl

  2. Di jendela Graph Explorer, perluas bagian Memori, klik kanan pada grafik Total Penerapan, dan pilih Tambahkan grafik ke Tampilan Analisis Baru.

  3. Buka Editor Tampilan dengan mengklik gigi Pengaturan dan pilih susunan kolom berikut: Proses, Jenis Penerapan, Tumpukan Penerapan, dan Ukuran.

  4. Klik pada header kolom Ukuran sehingga hasilnya diurutkan dalam urutan turun. Commit Stack menunjukkan jalur kode yang mengarah ke memori yang dialokasikan. Hasil ini dapat membantu memahami alasan alokasi. Pengurutan berdasarkan ukuran memungkinkan Anda untuk fokus pada alokasi yang lebih besar dan menyelidiki apakah ada kesempatan untuk dioptimalkan.

  5. Filter ke proses yang Anda minati untuk menganalisis dengan mengklik kanan proses dan memilih Filter Ke Pilihan.

  6. Untuk memperbesar ke wilayah yang Anda minati di viewport, pilih rentang, klik kanan pada grafik, dan pilih Zoom.

  7. Navigasikan melalui Commit Stack untuk memahami fungsi mana yang telah mengalokasikan memori. Tumpukan penerapan akan membutuhkan simbol yang dimuat. Untuk memuat simbol, pilih Lacak>Muat simbol dari bilah menu navigasi atas.

    Cuplikan layar jejak memori windows Penganalisis Kinerja

Menerapkan analisis pelacakan Anda untuk mengurangi penggunaan memori

Dalam menganalisis memori yang dialokasikan, Anda akan menemukan petunjuk untuk membantu Anda memutuskan di mana penggunaan memori dapat diminimalkan.

Beberapa area yang perlu dipertimbangkan sehubungan dengan penerapan analisis jejak Anda terhadap pembaruan kode Anda untuk mengurangi penggunaan memori, meliputi:

  • Kurangi penggunaan memori saat berada di latar depan: Menganalisis jejak memori dapat membantu Anda mengidentifikasi penggunaan memori yang tidak perlu di latar depan dan memperbarui kode Anda untuk mengurangi atau menghapus penggunaan tersebut.

  • Meminimalkan pekerjaan saat berada di latar belakang: Sistem memiliki kebijakan untuk menua halaman dari set kerja proses. Menggunakan lebih sedikit memori di latar belakang memungkinkan sistem menjadi lebih efisien dengan menjaga lebih sedikit memori aplikasi tetap tinggal. Pelajari selengkapnya tentang cara Meningkatkan konsumsi daya dan masa pakai baterai dengan meminimalkan pekerjaan latar belakang, yang juga akan diterjemahkan ke dalam penggunaan memori yang lebih sedikit saat berada di latar belakang.

  • Rilis sumber daya di latar belakang: Pada runtime, aplikasi dapat membuat beberapa cache memori, serta membuat alokasi grafis untuk mendukung UI-nya. Alokasi ini mungkin dapat dibebaskan ketika aplikasi diminimalkan atau tidak terlihat. Aplikasi dapat mendaftar untuk pemberitahuan memori rendah untuk mengambil tindakan tersebut, tetapi strategi yang lebih baik mungkin untuk membebaskan memori setelah periode tidak digunakan, ketika aplikasi menyimpulkannya tidak aktif. Periode disuse ini dapat bervariasi menurut aplikasi, sehingga indikator penggunaan yang tidak aktif dapat berkisar dari beberapa menit hingga 1/2 jam atau lebih. Perawatan harus diambil untuk menyeimbangkan penghematan memori semacam ini dengan responsivitas. Jika cache mahal untuk dibangun kembali, aplikasi dapat memilih untuk mempertahankannya selama masa pakai aplikasi.

  • Pastikan aplikasi Anda tidak membocorkan memori: Untuk memeriksa kebocoran memori, pertama-tama tetapkan tolok ukur status stabil, di mana dataran tinggi penggunaan memori aplikasi atau tidak tumbuh di luar nilai tertentu. Anda dapat menetapkan status stabil ini dengan terus menggunakan aplikasi atau membiarkannya menganggur di latar belakang. Dengan menggunakan jejak yang telah Anda ambil untuk mengidentifikasi kemungkinan kebocoran memori, Anda dapat menemukan di mana memori tersebut dialokasikan dalam kode Anda dan bagaimana memori tersebut dapat dibebaskan penggunaannya setelah melayani tujuannya. Jika memori terus tumbuh saat aplikasi berjalan, ini kemungkinan indikasi kebocoran memori. Perbesar ke wilayah yang sesuai dengan pertumbuhan dalam jejak Anda dan analisis tumpukan penerapan dengan hati-hati.

Menggunakan Ruang Disk secara efisien

Jejak disk mengacu pada ukuran aplikasi saat disimpan dalam status tidak aktif (tidak mengeksekusi kode). Jika aplikasi mengambil banyak jejak disk, itu bisa menjadi kesempatan untuk mengoptimalkan.

Ada beberapa cara untuk mengurangi jejak disk aplikasi Anda dapat meningkatkan performa:

  • Saat disk penuh, sistem file tidak dapat lagi menyimpan konten baru dengan cara yang berdekatan. Disk penuh menjadi terfragmentasi, menyimpan konten baru pada sektor yang tidak berdampingan. Ini diterjemahkan ke waktu latensi yang lebih lama ketika konten tersebut diakses dari disk. Sistem IO akan memberikan throughput disk yang jauh lebih baik ketika konten berdekatan dan dapat diakses secara berurutan atau menggunakan IO yang lebih besar.

  • Disk lengkap dapat diterjemahkan ke latensi tulis yang lebih lama untuk sistem berbasis SSD. Ketika ada lebih sedikit sel kosong untuk menyerap tulisan, penulisan dapat menimbulkan operasi baca-ubah-tulis, performa yang melambat.

  • Disk penuh dapat menghambat kemampuan untuk memperbarui aplikasi Anda. Meskipun OS tangguh dan dapat menjaga sistem tetap terbaru dan aman, bahkan dengan ruang disk yang tersedia rendah, jumlah ruang disk yang tersedia yang sehat untuk penahapan konten untuk pembaruan aplikasi Anda akan diterjemahkan ke pengalaman pembaruan yang lebih cepat dan lebih lancar.

  • Membutuhkan sejumlah besar jejak disk besar yang akan diakses pada waktu proses juga akan diterjemahkan ke penggunaan memori. Ini akan berdampak pada responsivitas aplikasi Anda dan sistem secara umum. Selain itu, jika proporsi kecil jejak disk diperlukan pada waktu proses, aplikasi mungkin menggunakan ruang disk secara tidak efisien.

Beberapa cara untuk mengurangi, atau lebih efisien dengan, ruang disk Anda meliputi:

  • Terapkan prinsip "bayar untuk dimainkan" ke jejak disk Anda (unduh hanya apa yang Anda butuhkan): Aplikasi dapat mencakup berbagai fitur dengan tidak semua fitur yang berlaku untuk semua pengguna. Ini bisa menjadi salah satu alasan untuk jejak disk besar. Dengan menerapkan prinsip "bayar untuk dimainkan", Anda dapat meminta pengguna untuk memilih hanya untuk mengunduh fitur yang mereka butuhkan, menerjemahkan ke jejak disk yang lebih kecil saat mereka mengunduh aplikasi Anda. Konten tambahan dibuat opsional untuk diunduh hanya ketika pengguna memiliki kebutuhan akan kemampuan yang lebih kaya. Selain fitur, Anda dapat menerapkan prinsip "bayar untuk bermain" yang sama ke dukungan bahasa. Aplikasi ini dapat menyertakan subset pilihan bahasa populer secara default, dengan bahasa tambahan yang disertakan secara opsional atau bergantung pada lokasi yang ditetapkan pada sistem pengguna.

  • Terapkan ukuran cache yang efisien: Dalam beberapa kasus, aplikasi dapat menggunakan cache pada disk untuk membuat pengalaman pengguna lebih responsif. Kebijakan dapat diatur untuk bagaimana aplikasi Anda mengelola cache, dengan batas atas yang ditetapkan pada ukuran cache berdasarkan kapasitas disk dan mengubah ukuran cache saat ruang yang tersedia pada disk rendah.

  • Menerapkan penggunaan aset yang efisien: Aplikasi akan sering menyertakan aset gambar dan dapat terdiri dari berbagai ukuran gambar untuk mendukung beberapa resolusi. Mengoptimalkan ukuran gambar, dimensi, format, dan kompresi untuk subset resolusi, dan memanfaatkan penskalaan untuk mendukung resolusi yang tersisa, dapat secara signifikan mengurangi jejak disk.

  • Menyelidiki peluang pengoptimalan biner: Alat, seperti SizeBench, memungkinkan penulis aplikasi untuk menyelidiki apa yang berkontribusi pada jejak biner dan menemukan peluang untuk mengurangi jumlah ruang disk yang digunakan.

Sumber Daya Tambahan: