Selamlar;
Türetilmiş bir formu (MDIChild) create ettiğimde örneğin 100-200 KB kadar bellekte artış gözlemliyorum, formu kapattığımda free etmeme rağmen (nil de etsem) kullanılan bellekte düşme olmuyor, iade edilmiyor. Konu forumda çok konuşuldu, geçmiş konuları da taradım tekrardan ama sonuç olumsuz. FastMM kullandım yine değişen olmadı ve oluşan leak'lere baktığımda bazı üçüncü parti bileşenlerin de buna sebebiyet verdiğini gözlemledim. Bunun dışında yeni bir proje oluşturup standart nesnelerle işlem yaptığında rezerve edilen belleğin tamamı iade edilmesine rağmen TEdit sınıfından türettiğim ve içinde başka sınıfları create/free ettiğim bir nesneyi bu yeni (ve boş) projede kullandığımda da aynı şekilde bellek iadesi yapılmadı Neredeyse create ettiğim her şeyi free edip duruma göre nil de atamama rağmen bu hergele neye kızıyor olabilir ki?
Form oluşturulduğunda rezerve edilen belleğin iadesi
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
-
- Kıdemli Üye
- Mesajlar: 1223
- Kayıt: 26 Nis 2005 04:08
Re: Form oluşturulduğunda rezerve edilen belleğin iadesi
Selam;
"Türetilmiş bir formu (MDIChild) create ettiğimde örneğin 100-200 KB kadar bellekte artış gözlemliyorum," demişsiniz, peki bu artış formu her create ettiğinizde devam ediyormu ? eğer etmiyorsa sorun yok demektir.
Bu arada bende şimdi denedim sorun yok, create edince 250-300 kb kadar gidiyor, yok edince geri geliyor.
OnClose eventim :
CARI_HESAPLAR:=NIL;
RELEASE;
"Türetilmiş bir formu (MDIChild) create ettiğimde örneğin 100-200 KB kadar bellekte artış gözlemliyorum," demişsiniz, peki bu artış formu her create ettiğinizde devam ediyormu ? eğer etmiyorsa sorun yok demektir.
Bu arada bende şimdi denedim sorun yok, create edince 250-300 kb kadar gidiyor, yok edince geri geliyor.
OnClose eventim :
CARI_HESAPLAR:=NIL;
RELEASE;
-
- Kıdemli Üye
- Mesajlar: 1223
- Kayıt: 26 Nis 2005 04:08
Re: Form oluşturulduğunda rezerve edilen belleğin iadesi
Evet her oluşturma işleminde artarak devam ediyor ve geri vermiyor. Release de denemiştim, değişen bir şey olmuyor.
Re: Form oluşturulduğunda rezerve edilen belleğin iadesi
SetProcessWorkingSetSize apisini kullanabilirsiniz..
SetProcessWorkingSetSize(GetCurrentProcess, $ffffffff, $ffffffff);
SetProcessWorkingSetSize(GetCurrentProcess, $ffffffff, $ffffffff);
amatör küme programcı
-
- Kıdemli Üye
- Mesajlar: 1223
- Kayıt: 26 Nis 2005 04:08
Re: Form oluşturulduğunda rezerve edilen belleğin iadesi
Ali kardeşim, bu api'yi GetCurrentProcess parametresiyle değil de Handle parametresiyle denemiştim ve sonuç alamamıştım şimdi senin örneğinle denedim çok ilginç bir sonuçla karşılaştım, şöyle ki; uygulamayı ilk çalıştırdığımda yaklaşık olarak 10 Mb bellek kullanımıyla başlıyor, yeni bir form oluşturulduğunda takriben 100-200 Kb artıyor ve formu free ettikten sonra önerdiğin api'yi çağırdığımda uygulamanın kullandığı bellek miktarı yaklaşık 5 Mb civarına düşüyor Bu nasıl bir bellek yönetimidir yahu Teşekkürlerimle..
Re: Form oluşturulduğunda rezerve edilen belleğin iadesi
Kod: Tümünü seç
SetProcessWorkingSetSize(GetCurrentProcess, $ffffffff, $ffffffff);
programin gercekte harcadigi (kapladigi alan) rezerve edilmis bellek sütununda gösteriliyor.
bence yukaridaki kodu kullanmak zorunda olmak, isletim sisteminin Memory-Management mantigina ters.
Rezerve edilen alan free edildiginde geri verilmis olmali.
Geri verilmeyen alan'in ise SetProcessWorkingSetSize(GetCurrentProcess, $ffffffff, $ffffffff) prosedürü ile cebren geri iade edilmesi var olan bilesenlerin rezerve edilmis alanina tecavüz olur. Bu durumda Access Violation hatasi kacinilmazdir.
Bunun baska yolu olmali.
kıdemsiz üye