Mendeteksi Memory Leak

Dear Delphiers,
Kadang kita mengalami PC yang kita pakai kerja lama-lama lemot. Viruskah? Sudah update antivirus tetap aja masih lemot. Tapi setelah restart PC kita kembali segar bugar. Kalau memang kejadian ini sering kita alami, seharusnya kita mulai curiga jangan-jangan aplikasi yang sedang kita kerjakan mengalami/melakukan “Memory Leak”



Apa itu memory leak? Memory Leak adalah ketidak mampuan software yang kita bangun untuk membebaskan memory yang dia pakai . Memory Leak adalah masalah yang srius. Coba bayangkan, ketika kita membangun aplikasi yang harus berjalan 24/7 dan pada setiap procedure menyebabkan memory leak, apa yang akan terjadi? Bisa-bisa Komputer akan hang dan bilang kalo dia kehabisan memory (Out Of Memory).
ReportMemoryLeaksOnShutdown
Semua versi delphi mulai Delphi 2006 mempunyai fasilitas memory manager yang sangat-sangat lebih bagus dari versi sebelumnya. Salah satu fitur yang sangat berguna adalah, aplikasi bisa kita minta melaporkan apakah ada memory leak pada saat aplikasi selesai dijalankan.
Caranya dengan mengganti value dari global variable ReportMemoryLeaksOnShutdown menjadi true. Nilai dari ReportMemoryLeaksOnShutdown by default adalah False. Lebih jelasnya ikuti langkah-langkah berikut ini :

1. Buka project > View Source
2. Perhatikan baris berikut :

begin
Application.Initialize;
......
......
Application.Run;
end.

Tuliskan code “ReportMemoryLeaksOnShutdown := DebugHook <> 0;” pada baris sebelum baris Application.Initialize. Maka akan menjadi :

Begin
ReportMemoryLeaksOnShutdown := DebugHook <> 0;
Application.Initialize;
......
......
Application.Run;
end.

3. Jalankan aplikasi dengan menekan F9.
4. Tekan Ctrl+F2 untuk mengakhiri aplikasi.

Jika setelah selesai menjalankan aplikasi tidak ada pesan akan adanya memory leak, maka aplikasi kita bebas dari memory leak. Tapi jika ada pesan adanya memory leak, kita harus mencari bagian mana yang menyebaban memory leak tersebut.

Contoh Memory Leak
Berikut ini contoh jika terjadi Memory Leak. Tempatkan baris code berikut pada event OnCreate dari main form pada aplikasi kita.

procedure TfrmMain.FormCreate(Sender: TObject);
var
SS: TStrings;
begin
SS := TStringList.Create;
SS.Add('Ini Menyebabkan Memory Leak');
end;
Jalankan aplikasi dan langsung dimatikan. Setelah aplikasi selesai dijalankan maka akan ada pesan kira-kira seperti ini :

Free Image Hosting

Pesan di atas menunjukan bahwa telah terjadi memory leak pada aplikasi yang baru saja kita jalankan. Kenapa bisa terjadi memory leak? Ya ! Hal ini terjadi karena ada object yang belum di Free. Objek apa itu? Lalu bagaimana mengatasi memory leak pada kasus ini? Caranya, pastikan objek yang sudah di create harus di free ketika objek tersebut sudah tidak dipakai. Perhatikan baris code berikut :

procedure TfrmMain.FormCreate(Sender: TObject);
var
SS: TStrings;
begin
SS := TStringList.Create;
try
SS.Add('Ini Menyebabkan Memory Leak');
finally
SS.Free;
end;
end;

Lalu jalankan aplikasi dan langsung dimatikan. Masih ada pesan adanya memory leak? OK, cukup sekian artikel ini semoga bermanfaat. SELAMAT BERKARYA !

2 comments:

0221_4_4483 said...

Wow makasih untuk tulisannya,
ah baru nyadar ternyata program yg dibikin meski sudah OK ternyata berpotensi untuk memory leak.

Setelah test dengan metode yang di jelaskan.

Thanks banget atas tulisannya.
Segera membenahi program.


Salam,

Bagus Prasojo said...

Alhamdulillah kalo artikel ini bermanfaat buat anda


Terimakasih sudah berkunjung ke blog saya.

Post a Comment