Sabtu, 15 Desember 2012

Mendeteksi Memory Leak(Memory Leak Detection)


Sebuah Aplikasi yang baik dan kuat/robust application seminimal mungkin harus terhindar dari bug walaupun pastinya no body's perfect,dan satu hal lagi yang menjadi ukuran baiknya sebuah apllikasi adalah tidak memiliki kebocoran memory atau lebih dikenal dengan Memory Leak.saya coba mengulas sedikit apa itu memory leak.

Memory Leak adalah suatu keadaan dimana suatu blok memory yang dialokasikan tp tidak pernah di bebaskan oleh pihak yang bertanggung jawab(program),jika memory yang dialokasikan tidak dibebaskan dari memory,maka akan mengurangi ketersedian memori yang dapat digunakan oleh sistem operasi dan aplikasi lainnya, sehingga apabila terdapat dalam jumlah yang besar, dapat mempengaruhi kinerja sistem operasi dan aplikasi lainnya.
Memory leak murni merupakan kesalahan pembuat program yang ceroboh dan kurang hati – hati dalam merancang / mengembangkan programnya.

Contoh Memory Leak
Contoh Berikut kita akan membuat sebuah memory leak
hanya contoh:


Procedure TForm1.Button1Click(Sender:TObject);
var
aObject:TObject;
begin
aObject:=TObject.Create;
ShowMessage('an Object was created!'); 
end;
 kode diatas sudah benar dan berhasil dikompile dan ditutup dengan baik,program kelihatannya berjalan baik-baik saja.tetapi sebenarnya ada sebuah blok memory yang dialokasikan untuk aObject dan tidak pernah dibebaskan walaupun kita sudah menutup program nya.blok memory yang tidak terpakai ini dapat dibebaskan setelah komputer di restart atau dengan menggunakan software memory cleaner.

Bagaimana mendeteksi Memory Leak?
Untuk mendeteksi Meory leak kita bisa menggunakan tool seperti eurekaLog dll.
Sejak Delphi 2006 keatas delphi menggunakan FastMM sebagai default Memory Manager nya ,dan mempunyai fasilitas untuk melaporkan adanya memory leak yang terjadi ketika aplikasi di tutup.secara default fasilitas  ini tidak diaktifkan,kita dapat mengaktifkannya dengan satu baris kode saja pada file .dpr di project kita.
contoh pada file .dpr project :

begin
  ReportMemoryLeaksOnShutdown:=true;
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

dan compile kembali project tadi kemudian jalankan.setelah di tutup program tadi maka akan menampilkan laporan memory leak seperti berikut :


Fasilitas Laporan ini memang tidak menunjukan secara detail Unit,Procedure/Function,dan baris code dimana kesalahan tersebut terjadi.tetapi jika anda menggunakan produk komersial seperti eurekalog anda dijamin akan puas,tapi setidak nya lebih baik dari pada tidak sama sekali .
Jika anda Menggunakan Delphi 2006 kebawah anda bisa mendownload FastMM dan mengintregasikanya dengan delphi.

Semoga bermanfaat,Keep Spirit!

Tidak ada komentar:

Posting Komentar