Yorumları: 21
Konuları: 3
Kayıt Tarihi: 22-05-2020
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 46 Başlangıç
06-06-2020, Saat: 12:04
(Son Düzenleme: 06-06-2020, Saat: 12:12, Düzenleyen: DelphiCan.)
Merhaba.
projemde shape oluşturmam ve gerektiğinde silmem gerekiyor.
denemek için koddaki gibi 1000 tane oluşturdum. silerken Free yada DisposeOf() denedim ama her seferinde bellek kullanımı artıyor.
300kb kadar. bu problem için farklı bir yöntem varsa yardımcı olursanız sevinirim. proje vcl
TShape *TestShape[1000];
void __fastcall TForm1::Button5Click(TObject *Sender){
for (int j = 0; j < 200; j++) {
for (int i = 0; i < 100; i++) {
TestShape[i] = new TShape(GroupBox1);
TestShape[i]->Parent = GroupBox1;
TestShape[i]->Height = 5;
TestShape[i]->Width = 5;
TestShape[i]->Brush->Color = clRed;
TestShape[i]->Left = i * 5;
TestShape[i]->Top = i * 5;
}
for(int i = 1; i < 100; i++){
TestShape[i]->Free();
}
}
}
Yorumları: 262
Konuları: 26
Kayıt Tarihi: 29-07-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 317 Acemi
06-06-2020, Saat: 12:11
(Son Düzenleme: 06-06-2020, Saat: 12:13, Düzenleyen: DelphiCan.)
@ tabikisura10,
Konu ve yorumlarınızda Forum Kurallarına riayet etmediğinizi görüyoruz.
Bu konu başlığında yaptığınız tüm alıntı ve kod biçimlendirmeler düzeltilmiştir.
Bir sonraki konu veya yorumlarınızda bu uyarıları dikkate almadığınızda, forum kurallarında belirtilen yaptırımlar uygulanacaktır!
Önemli: DelphiCan forumu, Delphi, Object Pascal, FMX mimarisi ve bu dilin geliştirme ortamına yönelik fikir alış verişi ve sorun çözümüne odaklı kurulmuştur.
Forumun bu hassasiyetini göz önünde bulundurarak, kullandığınız yazılım dili ilgili forumlarda araştırmalar yapmanızı öneriyoruz.
Delphi Can'dır!
Yorumları: 21
Konuları: 3
Kayıt Tarihi: 22-05-2020
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 46 Başlangıç
daha önce fmx ile ilgili problemim vardı yazdım. bu aynı durum değil.yazı bicimi ise ben değiştirmedim. DisposeOf kopyala yapıştır yaptıktan sonra code aldı. sonra yazı tipini değiştirdi. konuyu açtıktan sonra fark ettim.
Yorumları: 262
Konuları: 26
Kayıt Tarihi: 29-07-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 317 Acemi
06-06-2020, Saat: 12:20
(Son Düzenleme: 06-06-2020, Saat: 12:23, Düzenleyen: DelphiCan.)
(06-06-2020, Saat: 12:15)tabikisura10 Adlı Kullanıcıdan Alıntı: daha önce fmx ile ilgili problemim vardı yazdım. bu aynı durum değil.yazı bicimi ise ben değiştirmedim. DisposeOf kopyala yapıştır yaptıktan sonra code aldı. sonra yazı tipini değiştirdi. konuyu açtıktan sonra fark ettim.
Örneklediğiniz yazılım dili konusunda bu forumda destek bulabileceğinizi sanmıyorum.
Sorun, FMX mimarisi ile geliştirdiğiniz bir algoritma üzerine ise ilgili bölümde yalnızca FMX kodu ile yardım talebinde bulunabilirsiniz.
Kod biçimlendirmedeki kastımız; metin editörü içindeki metinsel biçimlendirme (metinlerin font'u ile ilgili bir kısıtlama ve kuralımız yok) değil, konu içerisindeki kod bölümünde kullandığınız uygulama kodlarının biçimlendirilmesidir.
Önemli Not: Herhangi bir yerden kopyaladığınız metni, DelphiCan metin editörüne yapıştırmadan önce, metin editörünün araç çubuğunda bulunan "Kaynağı Görüntüle" butonuna tıklayın. Daha sonra kopyaladığınız metni yapıştırın. Böylece harici bir kaynaktan aldığınız metin biçimlendirmesi yok sayılacaktır.
Delphi Can'dır!
Yorumları: 21
Konuları: 3
Kayıt Tarihi: 22-05-2020
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 46 Başlangıç
(06-06-2020, Saat: 12:20)DelphiCan Adlı Kullanıcıdan Alıntı: (06-06-2020, Saat: 12:15)tabikisura10 Adlı Kullanıcıdan Alıntı: daha önce fmx ile ilgili problemim vardı yazdım. bu aynı durum değil.yazı bicimi ise ben değiştirmedim. DisposeOf kopyala yapıştır yaptıktan sonra code aldı. sonra yazı tipini değiştirdi. konuyu açtıktan sonra fark ettim.
Örneklediğiniz yazılım dili konusunda bu forumda destek bulabileceğinizi sanmıyorum.
Sorun, FMX mimarisi ile geliştirdiğiniz bir algoritma üzerine ise ilgili bölümde yalnızca FMX kodu ile yardım talebinde bulunabilirsiniz.
Kod biçimlendirmedeki kastımız; metin editörü içindeki metinsel biçimlendirme (metinlerin font'u ile ilgili bir kısıtlama ve kuralımız yok) değil, konu içerisindeki kod bölümünde kullandığınız uygulama kodlarının biçimlendirilmesidir.
Önemli Not: Herhangi bir yerden kopyaladığınız metni, DelphiCan metin editörüne yapıştırmadan önce, metin editörünün araç çubuğunda bulunan "Kaynağı Görüntüle" butonuna tıklayın. Daha sonra kopyaladığınız metni yapıştırın. Böylece harici bir kaynaktan aldığınız metin biçimlendirmesi yok sayılacaktır.
delphi ve c++ builder rad studio olduğu için delphide nasılsa aynen kullanılabiliyor.
genelde C++ builder için delphileştirilmiş C++ diyorlar. o yüzden yazmıştım.
kodları kendi derleyicimden yapıştırdığımda boşlukların olmadığını gördüm daha anlaşır olsun diye elle bıraktım doğru düzeltiyormuş. özür dilerim bu konuda.
componentleri silmemeye karar verdim gizle göster olarak kullanacağım.
teşekkür ederim. konu silinebilir teşekkür.
Yorumları: 262
Konuları: 26
Kayıt Tarihi: 29-07-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 317 Acemi
06-06-2020, Saat: 12:42
(Son Düzenleme: 06-06-2020, Saat: 12:43, Düzenleyen: DelphiCan.)
(06-06-2020, Saat: 12:36)tabikisura10 Adlı Kullanıcıdan Alıntı: (06-06-2020, Saat: 12:20)DelphiCan Adlı Kullanıcıdan Alıntı: Örneklediğiniz yazılım dili konusunda bu forumda destek bulabileceğinizi sanmıyorum.
Sorun, FMX mimarisi ile geliştirdiğiniz bir algoritma üzerine ise ilgili bölümde yalnızca FMX kodu ile yardım talebinde bulunabilirsiniz.
Kod biçimlendirmedeki kastımız; metin editörü içindeki metinsel biçimlendirme (metinlerin font'u ile ilgili bir kısıtlama ve kuralımız yok) değil, konu içerisindeki kod bölümünde kullandığınız uygulama kodlarının biçimlendirilmesidir.
Önemli Not: Herhangi bir yerden kopyaladığınız metni, DelphiCan metin editörüne yapıştırmadan önce, metin editörünün araç çubuğunda bulunan "Kaynağı Görüntüle" butonuna tıklayın. Daha sonra kopyaladığınız metni yapıştırın. Böylece harici bir kaynaktan aldığınız metin biçimlendirmesi yok sayılacaktır.
delphi ve c++ builder rad studio olduğu için delphide nasılsa aynen kullanılabiliyor.
genelde C++ builder için delphileştirilmiş C++ diyorlar. o yüzden yazmıştım.
kodları kendi derleyicimden yapıştırdığımda boşlukların olmadığını gördüm daha anlaşır olsun diye elle bıraktım doğru düzeltiyormuş. özür dilerim bu konuda.
componentleri silmemeye karar verdim gizle göster olarak kullanacağım.
teşekkür ederim. konu silinebilir teşekkür.
Özür dileyecek kadar bir kabahatiniz olduğunu düşünmüyorum.
Anlayışınız için teşekkür ederiz.
Konuyu kendiniz de silebilirsiniz.
Delphi Can'dır!
Yorumları: 1.499
Konuları: 83
Kayıt Tarihi: 05-08-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 12.314 Üstad
200 * 100 kadar TShape oluşturuyorsunuz ama 99 tane siliyorsunuz koddan gördüğüm kadarı ile. Ayrıca dizide sürekli aynı elemanların üzerine yazıyorsunuz.
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
Yorumları: 1.572
Konuları: 88
Kayıt Tarihi: 09-08-2016
Rep Puanı: 13.841 Üstad
(06-06-2020, Saat: 12:53)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı: 200 * 100 kadar TShape oluşturuyorsunuz ama 99 tane siliyorsunuz koddan gördüğüm kadarı ile. Ayrıca dizide sürekli aynı elemanların üzerine yazıyorsunuz.
200 * 99 siliyor desek daha doğru olacak.
@ tabikisura10; silme işlemi yaptığınız döngüde i'nin başlangıç değerine dikkat edin.
There's no place like 127.0.0.1
Yorumları: 21
Konuları: 3
Kayıt Tarihi: 22-05-2020
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 46 Başlangıç
döngü test içindi. farklı döngü ile oluşturup farklı döngüde sildiğim de ram azalmıyor. her oluşturduğumda artmaya devam ediyor.
Yorumları: 1.898
Konuları: 22
Kayıt Tarihi: 05-08-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 21.184 Üstad
07-06-2020, Saat: 10:37
(Son Düzenleme: 07-06-2020, Saat: 10:46, Düzenleyen: mrmarman.)
Size tam bir test ortamı sunalım, anlaşamadığımız konusunda anlaşmak için.
Bunun benzerini C++ ile yapabilirsiniz.
Dilediğiniz bir butona CreateShapes( 2000 ); gibi bir komut ile parametre olarak verdiğiniz sayıda Shape ürettirin, sonra da dilediğiniz başka bir buttonda FreeShapes(); deyin hepsi free olsun.
Array konusunda bir örnek de vesileyle paylaşmış olalım.
Uses Vcl.ExtCtrls, psAPI;
var
TestShape : Array of Vcl.ExtCtrls.TShape;
procedure TForm1.CreateShapes( aCount : integer );
var
i : Integer;
begin
if High( TestShape ) > -1 then
FreeShapes(); // FreeShapes etmeden tekrar CreateShapes demişsiniz, önce üretilenleri temizleyelim...
SetLength( TestShape, aCount );
for i := Low(TestShape) to High(TestShape) do begin
TestShape[i] := TShape.Create(GroupBox1);
with TestShape[i] do begin
Parent := GroupBox1;
Height := 5;
Width := 5;
Brush.Color := clRed;
Left := i * 5;
Top := i * 5;
end;
end;
end;
procedure TForm1.FreeShapes;
var
i : Integer;
begin
for i := Low(TestShape) to High(TestShape) do
FreeAndnil( TestShape[i] );
Finalize( TestShape );
end;
procedure TForm1.Button1Click(Sender: TObject);
procedure TrimAppMemorySize;
var
MainHandle : THandle;
begin
MainHandle := OpenProcess(PROCESS_ALL_ACCESS, false, GetCurrentProcessID);
SetProcessWorkingSetSize(MainHandle, $FFFFFFFF, $FFFFFFFF);
CloseHandle(MainHandle);
Application.ProcessMessages;
end;
function ProcessMemory: longint;
var
pmc: PPROCESS_MEMORY_COUNTERS;
cb: Integer;
begin
Result := 0;
// Get the used memory for the current process
cb := SizeOf(TProcessMemoryCounters);
GetMem(pmc, cb);
pmc^.cb := cb;
if GetProcessMemoryInfo(GetCurrentProcess(), pmc, cb) then
Result:= Longint(pmc^.WorkingSetSize);
FreeMem(pmc);
end;
begin
TButton(Sender).Enabled := False;
TrimAppMemorySize();
Memo1.Lines.Add( '------------------------------------------------------' );
Memo1.Lines.Add( 'Trim Memory ' + FormatFloat( '#,###0',ProcessMemory / 1024 ) + ' KB' );
CreateShapes( 2000 );
Memo1.Lines.Add( '1st measurement ' + FormatFloat( '#,###0',ProcessMemory / 1024 ) + ' KB' );
FreeShapes;
Memo1.Lines.Add( '2nd measurement ' + FormatFloat( '#,###0',ProcessMemory / 1024 ) + ' KB' );
TButton(Sender).Enabled := True;
end;

Saygılarımla
Muharrem ARMAN
|