Merhaba ustalarım. Diyelim bir foksiyon içinde bir memorystream create ettik. Bunu foksiyon içinde free yapmadan foksiyon bittiğinde otomatik free ediyormu ? Birde etmiyorsa bunu nasıl gözlemleyebilirim ? Create ettiğimiz objeleri nasıl görebilirim ?
Konuyu Oyla:
Fonksiyon içinde create edilenler
|
22-07-2019, Saat: 08:37
Delphi'de Garbage Collection benzeri bir çöp toplama mekanizması yok. Lâkin hafızayı efektif kullanmak için çeşitli yollar var elbette. Bunlardan bir tanesi Owner mekanizması bir diğeri de sınıfların interface implemente etmeleri. Elbette en önemli husus, programcı disiplini. Oluşturduğumuz nesneyi yok etmek'de bizim işimiz olmalı normalde.
Sorunuza daha açık yanıt vermek gerekir ise; hayır bir memory stream ilgili scope'dan çıkılınca kendi kendine free olmaz. Bunun için ilgili nesnenin bir interface implemente etmiş olması gerekir. Oluşturduğunuz nesnelerin temizlenmediğini düşünüyor iseniz ve Delphi'nin yeni versiyonlarından birisini kullanıyorsanız; bu durumda ReportMemoryLeaksOnShutdown := true atamasını yapın, programınızı kullanın ve kapatın. Kapattığınızda hafıza kaçakları ile ilgili bir kısım bilgi sunulacak size(eğer var ise).
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ? Mal da yalan mülk de yalan Var biraz da sen oyalan...
22-07-2019, Saat: 10:50
(22-07-2019, Saat: 08:37)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı: Delphi'de Garbage Collection benzeri bir çöp toplama mekanizması yok. Lâkin hafızayı efektif kullanmak için çeşitli yollar var elbette. Bunlardan bir tanesi Owner mekanizması bir diğeri de sınıfların interface implemente etmeleri. Elbette en önemli husus, programcı disiplini. Oluşturduğumuz nesneyi yok etmek'de bizim işimiz olmalı normalde. Hocam cevap verdiğiniz için çok teşekkür ederim. Kaçak varmış 4 tane kadar ama adlarını vermiyor bunu öğrenmenin bir yolu yokmu acaba ?
22-07-2019, Saat: 11:18
(22-07-2019, Saat: 10:50)seci20 Adlı Kullanıcıdan Alıntı:(22-07-2019, Saat: 08:37)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı: Delphi'de Garbage Collection benzeri bir çöp toplama mekanizması yok. Lâkin hafızayı efektif kullanmak için çeşitli yollar var elbette. Bunlardan bir tanesi Owner mekanizması bir diğeri de sınıfların interface implemente etmeleri. Elbette en önemli husus, programcı disiplini. Oluşturduğumuz nesneyi yok etmek'de bizim işimiz olmalı normalde. Tuğrul Bey ilgili interface içinde yapılırsa ve sınıfa implemente edilirse create edilen nesnelerin takibini yapmak zorunda değilmiyiz. Konuyla iligli örnek yada kaynak için yardımcı olabilir misiniz. Teşekkürler.
22-07-2019, Saat: 13:22
(22-07-2019, Saat: 11:18)CumaParlak Adlı Kullanıcıdan Alıntı:(22-07-2019, Saat: 10:50)seci20 Adlı Kullanıcıdan Alıntı: Hocam cevap verdiğiniz için çok teşekkür ederim. Kaçak varmış 4 tane kadar ama adlarını vermiyor bunu öğrenmenin bir yolu yokmu acaba ? Bir sınıf interface implemente etmeye başladığında otomatik referans sayımı mekanizmasına dahil olur. İlgili nesneye referans 0(sıfır)'a düştüğünde otomatikman Destroy metodu çağrılır. Dolayısı ile nesne yok edilir. Bir nesneye işaret eden değişkenler (pointer'lar) tanımlandıkları scope'dan çıkıldığında (tabii interface implemente etmiş bir sınıfın nesne örneğine işaret eden bir değişkeni kast ediyorum); nil'e set edilir. Dolayısı ile referans değeri 1(bir) azaltılır. Konu ile ilgili bir kısım malümatı sitemde bulabilirsiniz.
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ? Mal da yalan mülk de yalan Var biraz da sen oyalan...
22-07-2019, Saat: 13:25
(22-07-2019, Saat: 10:50)seci20 Adlı Kullanıcıdan Alıntı:(22-07-2019, Saat: 08:37)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı: Delphi'de Garbage Collection benzeri bir çöp toplama mekanizması yok. Lâkin hafızayı efektif kullanmak için çeşitli yollar var elbette. Bunlardan bir tanesi Owner mekanizması bir diğeri de sınıfların interface implemente etmeleri. Elbette en önemli husus, programcı disiplini. Oluşturduğumuz nesneyi yok etmek'de bizim işimiz olmalı normalde. Bunun için de bir kaç yol var. Maalesef Delphi'nin memory leak tespit aracı nispeten kısıtlı. Aşağıdaki yollardan birisini kullanabilirsiniz. - EurekaLog indirip onu kullanın. - MadExcept kullanabilirsiniz. - FastMM Full Debug mode kullanabilirsiniz.
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ? Mal da yalan mülk de yalan Var biraz da sen oyalan...
22-07-2019, Saat: 13:39
Yeri gelmişken küçük de bir araştırma için size şevk vermeye çalışayım:
ReportMemoryLeaksOnShutdown := true; iken; ------------------------------------------------------------- 1- Aşağıdaki kodun çalışmasını sağlayın, ardından uygulamayı kapatın. Ne görüyorsunuz, neden ? procedure TForm1.Button1Click(Sender: TObject); begin TButton.Create(nil); end; 2- Aşağıdaki kodun çalışmasını sağlayın, ardından uygulamayı kapatın. Ne görüyorsunuz, neden ? procedure TForm1.Button1Click(Sender: TObject); begin TButton.Create(Self); end;
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ? Mal da yalan mülk de yalan Var biraz da sen oyalan...
22-07-2019, Saat: 15:29
Yanlışım varsa af ola.
cümleleri tam kuramaz isen af ola. TButton.Create(nil); komutunda birden çok hafıza taşması oldu. TButton.Create(Self); herhangi bir hafıza taşması olmadı.
"…De ki: "Hiç bilenlerle bilmeyenler bir olur mu? Şüphesiz, temiz akıl sahipleri öğüt alıp-düşünürler" (Zümer Suresi, 9)
22-07-2019, Saat: 15:38
En güzel açıklamayı kodun kendisi yapacaktır. TComponent.Create ve TComponent.Destroy metodlarını incelemek çok yararlı olacaktır ;-)
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ? Mal da yalan mülk de yalan Var biraz da sen oyalan... |
« Önceki Konu | Sonraki Konu »
|
Konu ile Alakalı Benzer Konular | |||||
Konular | Yazar | Yorumlar | Okunma | Son Yorum | |
Çoklu Create yapma | Kral | 1 | 28 |
6 saat önce Son Yorum: Halil Han BADEM |
|
kod timer icinde bir kere islesin | sadikacar60 | 5 | 295 |
30-04-2024, Saat: 17:22 Son Yorum: sadikacar60 |
|
Tabsheet içinde Form Create, Close olayları | YILDIRIMBEY | 0 | 278 |
24-08-2023, Saat: 17:26 Son Yorum: YILDIRIMBEY |
|
Thread içinde CoInitialize(nil) ve CoUninitialize | serdar | 6 | 1.147 |
22-08-2023, Saat: 09:50 Son Yorum: yhackup |
|
[Ödüllü Soru] Object türüne göre nesne üreten fonksiyon | Abdullah ILGAZ | 2 | 1.426 |
16-07-2023, Saat: 20:18 Son Yorum: Tuğrul HELVACI |
Konuyu Okuyanlar: 1 Ziyaretçi