Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Free vs FreeAndNil vs DisposeOf
#1
Merhaba,
   Delphi diline yeni başladım, bellek yönetimini çok ciddiye alıyorum. Bu sebeple "Free, FreeAndNil, DisposeOf" komutları arasında ki farklar nedir? Nerede ne zaman, ne amaçla kullanılıyor? İnternette bu konuda güncel tatmin edici kaynak bulmak çok zor. Delphi zaman içerisinde geliştiğinden genel tartışmalar eskimiş, güncel içerik bulamadığım için konu açtım. Bu konuda Delphi 5 versiyonundan beri konuya el atılmıştır diye tahmin ediyorum.

   Platformdan platforma bu komutların çalışma mantığı değişiyor mu? (VCL / FMX)

   Bellek sızıntısını minimum düzeyde tutmak için tavsiyeleriniz nelerdir?

   Teşekkür ederim.
Cevapla
#2
Merhaba,
İlk olarak şunu yapın;
1- Projeye başlar başlamaz Project >View Source Menüsüne ulaşın. Gelen ekranda

Begin // Bu Satırdan hemen sonra
ReportMemoryLeaksOnShutdown := True;

satırını ekleyin. Bu size projenizi her derleyip test ettikten sonra projeden çıkış yaptığınızda (ID den "Program Reset" demeden tabi) Size hafıza kaçakları olup olmadığı bildirecektir. Uyarı mesajı alıyorsanız son yazdığınız kodları gözden geçirin.

2- VCL tarafında anlık create edip kullandığınız nesneleri mutlaka işlem sonunda FreeAndNil(Nesne) şeklinde temizleyin.

3 - FMX tarafında ise Nesne.DisposeOf getirilmiş durumda. Bu alanda tam bir çalışmam olmadığı için yeterince test etme imkanım olmadı.

1 maddeyi mutlaka uygulayın/dikkate alın.

İyi çalışmalar.
Cevapla
#3
ReportMemoryLeaksOnShutdown := True;

Bu aslında varsayılan olarak gelmeli bence, uniguideki gibi.
WWW
Cevapla
#4
Yazarken aynı şeyi ben de düşündüm ????
Cevapla
#5
Free fonksiyonu hafızayı temizler ve bırakır ve nil(null) kontrolu yapmaz, aynı nesneyi iki kere  Free ederseniz invalid pointer hatası verir, FreeAndNil nil(null) kontrolu yapar iki kere çağırırsanız da hata vermez, Marco Cantu da bir kitabında FreeAndNil prosedürünü kullanmayı salık veriyordu, DisposeOf ise masaüstü platformlarda Free ile aynı işlemi yapıyor, mobilde ise nesneye atıfta bulunulan (Automatic Reference Counting) referans sayısını düzenliyor, hafızayı Garbage Collector( çöp toplayıcı) benzeri mekanizmalar temizliyor. O yüzden mobilde özellikle native kütüphaneleri kullanırken DisposeOf kullanmak daha mantıklı.
Herhangi bir basit problem, hakkında yeterince toplantı yapılarak, çözümsüz hale getirilebilir.
https://play.google.com/store/apps/developer?id=ONGUN
Cevapla
#6
Tam da bu konu ile ilgili çok da eski olmayan bir tartışma zaten yapılmış. Buyurun buradan inceleyin lütfen.
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#7
DisposeOf deprecated oldu lütfen Free kullanın diyor, Embarcadero.
Begin : = end / 2;
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Delphi Community Edition free info@guzelceker.com 1 2.334 29-06-2020, Saat: 11:13
Son Yorum: Fesih ARSLAN
  Boş yere free etmeye uğraştığımı düşünüyorum. bibilen 11 7.864 02-05-2020, Saat: 11:18
Son Yorum: bibilen
  Datasnap free yapmama sorunu. seci20 1 2.120 24-10-2019, Saat: 08:16
Son Yorum: 3ddark
  Nesne Neden Free Olmuyor? Halil Han BADEM 3 3.407 31-07-2019, Saat: 14:28
Son Yorum: sddk
  Json Free Etmek yhackup 4 4.640 31-07-2019, Saat: 11:17
Son Yorum: Halil Han BADEM



Konuyu Okuyanlar: 1 Ziyaretçi