11 Juni 2009

Deteksi Memory Leak

Delphi sebagai Integrated Development Environment (IDE) pada tiap rilis versi menawarkan fitur-fitur baru yang tentunya lebih baik dibanding versi sebelumnya. Ini berlaku juga untuk versi 2007. Salah satu fitur menarik yang ditawarkan berhubungan dengan masalah yang menjadi momok bagi sebagian pengembang aplikasi menggunakan Delphi khususnya, yaitu Memory Leak, yang kadang sulit ditemukan dan menghabiskan banyak waktu untuk proses debug.
Fitur yang dapat membantu kita dalam menemukan Memory Leak atau kebocoran memory ini terdapat pada variabel global yang terdapat pada unit System.pas, ReportMemoryLeaksOnShutdown. Variabel ini mempunyai tipe Boolean, yang jika bernilai True (default = False), akan memberikan pesan kesalahan yang intinya melaporkan adanya Memory Leak pada saat aplikasi ditutup, jika memang terjadi. Variabel ini bisa ditentukan di bagian manapun pada kode program, tapi mungkin yang terbaik adalah pada bagian utama program (.dpr).
begin
  ReportMemoryLeaksOnShutdown := True;
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

Sebenarnya fitur ini aku temukan secara “tidak sengaja” dan mungkin sebagian orang juga sudah tahu. Sejak kapan fitur ini diberikan juga tidak jelas bagiku, tapi dari sebuah sumber di internet fitur ini sudah ada sejak Delphi 2006 diluncurkan, yang berarti bukan hal baru pada versi 2007 dan yang pasti tidak didukung pada Delphi 7. Meskipun begitu tetap saja bisa menjadi sangat membantu. Kekurangannya adalah pada saat terjadinya event yang menampilkan pesan Memory Leak tidak bisa ditangkap, artinya fitur ini hanyalah menampilkan informasi saja. Kita tidak bisa melakukan, misalnya menampilkan pesan kesalahan sesuai dengan yang kita inginkan atau menyimpan event tersebut kedalam log. Oleh karena itu mungkin fitur ini lebih cocok digunakan pada saat debug program.
Potongan kode program ini akan menampilkan terjadinya pesan Memory Leak saat program ditutup.
uses Registry;

begin
  //…
  with TRegistry.Create do
  begin

  end;
end.

Tidak ada komentar:

Posting Komentar