Delphi Can
Datasetin bağlı olduğu Myquery'i free Etmek (MemoryLeak Tespiti) - Baskı Önizleme

+- Delphi Can (https://www.delphican.com)
+-- Forum: Delphi (https://www.delphican.com/forumdisplay.php?fid=3)
+--- Forum: Genel Programlama (https://www.delphican.com/forumdisplay.php?fid=6)
+--- Konu Başlığı: Datasetin bağlı olduğu Myquery'i free Etmek (MemoryLeak Tespiti) (/showthread.php?tid=109)

Sayfalar: 1 2


Datasetin bağlı olduğu Myquery'i free Etmek (MemoryLeak Tespiti) - yhackup - 25-08-2016

Sorumun başlığını yazmakta zorlandım Smile

Bir uygulamamda 

Myquery ile sorgumu yapıp, dataset ile dbgridime aktarıyorum.
Myquery create ettikten sonra , free edemiyorum edersem datasetim , tablom boşalıyor, nasıl bir yol izlemek daha mantıklı


Cvp: Datasetin bağlı olduğu Myquery'i free Etmek. - ozcanm - 25-08-2016

Merhaba,
Runtime anında yapacağın Create  işlemleri için mutlaka bunu Formun onCreate eventinde tanımlayarak yap.

Myquery :=TMyquery.Create(Self)

Formun FormClose eventinde
Myquery.Free;

formun FormDestroy eventinde ise
Myquery:=Nil;

şeklinde kullan. Bu şekilde MemoryLeak oluşmasını da önlemiş olursun.

İyi Çalışmalar.


Cvp: Datasetin bağlı olduğu Myquery'i free Etmek. - yhackup - 25-08-2016

Mantıklı
Ben hep işlem içerisinde create edip free ediyordum,

Peki self olarak create ettiğimde, Form kapandığında formla birlikte Myqueryde yok olmaz mı ?


Cvp: Datasetin bağlı olduğu Myquery'i free Etmek. - ozcanm - 25-08-2016

Aynen dediğiniz gibi olacaktır. Benim kullandığım yapı xForm ile işlemim bittiği an o formu hafızadan silerim. Aynı Myquery de yaptığım gbi. eğer bu formu sürekli kullacaksanız bu işlemi Ana formunuzun OnCreate kısmında Myquery :=TMyquery.Create(Self) şeklinde yapıp tabi ana formu referans gösterek kullanırsınız. Anaform.Myquery şeklinde, OnClose ve OnDestroy olayında Free ve Nill yapabilirsiniz. yine hafıza kaçaklarını önlemiş olursunuz. bu konuda ilk başlarda inanılmaz sıkıntılar yaşadığım için ilk Başta yapıya göre Create(Self yada Application) tanımlamasının ardından ilgili yerlerde de Free ve Nill yaparım ki daha sonra acaba hangi Create ten dolayı sıkıntı var dememek için.


Cvp: Datasetin bağlı olduğu Myquery'i free Etmek. - yhackup - 25-08-2016

Peki, projemde MemoryLeak var mı yokmu, bu kaçakları tespit edebilecek bir sistem var mı delphide bu kaçaklar nasıl tespit edilir.


Cvp: Datasetin bağlı olduğu Myquery'i free Etmek. - ozcanm - 25-08-2016

tabikide Project Menüsünden View Source ekranına geldiğinizde
begin
 ReportMemoryLeaksOnShutdown :=True; // bu satırı eklemeniz yeterli olacaktır.
 Application.Initialize;
yazdığınızda projeyi derleyip çalıştırın çıkışta size bilgi verecektir.

Daha detaylı bilgi almak isterseniz EurekaLog Burayı inceleyebilirsiniz.

İyi Çalışmalar.






Cvp: Datasetin bağlı olduğu Myquery'i free Etmek. - yhackup - 25-08-2016

(25-08-2016, Saat: 14:34)Cyber Adlı Kullanıcıdan Alıntı: tabikide Project Menüsünden View Source ekranına geldiğinizde
begin
 ReportMemoryLeaksOnShutdown :=True; // bu satırı eklemeniz yeterli olacaktır.
 Application.Initialize;
yazdığınızda projeyi derleyip çalıştırın çıkışta size bilgi verecektir.

Daha detaylı bilgi almak isterseniz EurekaLog Burayı inceleyebilirsiniz.

İyi Çalışmalar.
[url=https://www.youtube.com/watch?v=7yMs0t0t-7s][/url]

Teşekkürler ilk fırsaatta inceleyeceğim


Cvp: Datasetin bağlı olduğu Myquery'i free Etmek. - yhackup - 26-08-2016

Güzelmiş bu,
Memory Leak'lara son Smile

E3pdnA.png


Cvp: Datasetin bağlı olduğu Myquery'i free Etmek. - esistem - 26-08-2016

Dün baktım buna ben, Delphi 7 de çalışmadı o kod yada ben beceremedim. FastMM diye bir kod buldum, bu gün vakit bulabilirsem onu inceliycem.


Cvp: Datasetin bağlı olduğu Myquery'i free Etmek. - ozcanm - 26-08-2016

Malesef Delphi 7 ile uyumluluğu yok hocam,

Burada Tugrul Hocamızın bu konuyla ilgili bir açıklaması var.
Alıntı:Eğer Delphi 2010 ile yazılım geliştiriyorsanız; projenizin kaynak kodunda ReportMemoryLeaksOnShutDown := true; satırını aktif hâle getirin; Delphi 2010 kullanmıyorsanız EurekaLog gibi bir yazılımın demo sürümünü indirip Delphi’ye kurun ve muhtemel Memory Leak’leri tespit etmeye çalışın.

İyi Çalışmalar.