Mengoptimalkan Penggunaan Memori Program Delphi Anda

click fraud protection

Saat menulis aplikasi yang sudah berjalan lama - jenis program yang akan menghabiskan sebagian besar hari diminimalkan ke taskbar atau baki sistem, bisa menjadi penting untuk tidak membiarkan program 'lari' dengan penggunaan memori.

Dua kolom paling kanan menunjukkan penggunaan CPU (waktu) dan penggunaan memori. Jika suatu proses berdampak pada salah satu dari ini, sistem Anda akan melambat.

Jenis hal yang sering berdampak pada penggunaan CPU adalah program yang berulang (tanyakan programmer mana pun yang lupa meletakkan pernyataan "baca selanjutnya" dalam loop pemrosesan file). Masalah-masalah semacam itu biasanya cukup mudah diperbaiki.

Penggunaan memori, di sisi lain, tidak selalu jelas dan perlu dikelola lebih dari yang diperbaiki. Asumsikan misalnya bahwa program tipe penangkapan sedang berjalan.

Program ini digunakan sepanjang hari, mungkin untuk penangkapan melalui telepon di meja bantuan, atau untuk alasan lain. Tidak masuk akal untuk mematikannya setiap dua puluh menit dan kemudian memulai lagi. Ini akan digunakan sepanjang hari, meskipun pada interval yang jarang.

instagram viewer

Jika program itu bergantung pada beberapa pemrosesan internal yang berat atau memiliki banyak karya seni pada bentuknya, cepat atau lambat itu penggunaan memori akan tumbuh, meninggalkan sedikit memori untuk proses lain yang lebih sering, mendorong aktivitas paging, dan akhirnya memperlambat komputer.

Katakanlah Anda akan merancang program dengan formulir utama dan dua formulir tambahan (modal). Biasanya, tergantung pada versi Delphi Anda, Delphi akan memasukkan formulir ke dalam unit proyek (File DPR) dan akan menyertakan baris untuk membuat semua formulir saat startup aplikasi (Aplikasi. CreateForm (...)

Garis-garis yang termasuk dalam unit proyek adalah dengan desain Delphi dan bagus untuk orang-orang yang tidak terbiasa dengan Delphi atau baru mulai menggunakannya. Nyaman dan bermanfaat. Ini juga berarti bahwa SEMUA formulir akan dibuat saat program dijalankan dan BUKAN saat dibutuhkan.

Bergantung pada apa proyek Anda dan fungsi yang Anda laksanakan formulir dapat menggunakan banyak memori, jadi bentuk (atau secara umum: objek) hanya boleh dibuat ketika dibutuhkan dan dihancurkan (dibebaskan) segera setelah mereka tidak lagi perlu.

Baik, "DialogForm" dan "OccasionalForm" perlu dihapus dari daftar "Formulir pembuatan otomatis" dan dipindahkan ke daftar "Formulir yang tersedia".

Harap dicatat bahwa strategi yang diuraikan di sini didasarkan pada asumsi bahwa program yang dimaksud adalah program jenis "tangkapan" waktu nyata. Namun, dapat dengan mudah diadaptasi untuk proses tipe batch.

Delphi telah mencoba untuk meminimalkan ini dan memiliki arsitektur manajemen memori sendiri yang menggunakan blok yang jauh lebih kecil tetapi ini hampir tidak berguna di lingkungan Windows karena alokasi memori pada akhirnya terletak pada sistem operasi.

Setelah Windows mengalokasikan satu blok memori untuk suatu proses, dan proses itu membebaskan hingga 99,9% dari memori, Windows masih akan menganggap seluruh blok sedang digunakan, bahkan jika hanya satu byte dari blok yang benar-benar sedang digunakan bekas. Berita baiknya adalah bahwa Windows menyediakan mekanisme untuk membersihkan masalah ini. Shell memberi kami API yang disebut SetProcessWorkingSetSize. Inilah tanda tangannya:

Menurut definisi, fungsi SetProcessWorkingSetSize menetapkan ukuran set kerja minimum dan maksimum untuk proses yang ditentukan.

API ini dimaksudkan untuk memungkinkan pengaturan level rendah batas memori minimum dan maksimum untuk ruang penggunaan memori proses. Namun, ada sedikit kekhasan yang melekat di dalamnya yang paling beruntung.

Jika nilai minimum dan maksimum ditetapkan ke $ FFFFFFFF maka API akan sementara memotong ukuran yang diatur ke 0, menukar dari memori, dan segera setelah itu memantul kembali ke RAM, itu akan memiliki jumlah minimum memori yang dialokasikan untuk itu (ini semua terjadi dalam beberapa nanodetik, sehingga untuk pengguna harus tak kelihatan).

Panggilan ke API ini hanya akan dilakukan pada interval yang diberikan - tidak terus menerus, sehingga seharusnya tidak ada dampak sama sekali pada kinerja.

Sekarang, periksa secara berkala jumlah centang terakhir terhadap "Sekarang" dan jika perbedaan antara keduanya lebih besar dari periode yang dianggap sebagai periode idle aman, pangkas ingatan.

Sekarang putuskan setelah jangka waktu berapa Anda akan menganggap program menjadi idle. Kami memutuskan dua menit dalam kasus saya, tetapi Anda dapat memilih periode yang Anda inginkan tergantung pada keadaan.

Untuk mengadaptasi metode ini untuk waktu pemrosesan yang lama atau proses batch cukup sederhana. Biasanya Anda akan memiliki ide yang bagus di mana proses yang panjang akan dimulai (misalnya mulai dari pengulangan membaca jutaan catatan basis data) dan di mana itu akan berakhir (akhir dari pengulangan membaca basis data).

Cukup nonaktifkan timer Anda di awal proses, dan aktifkan lagi di akhir proses.

instagram story viewer