Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Component Oluşturup silmede ram kullanımı
#1
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();
    }
  }
}
Cevapla
#2
@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!
WWW
Cevapla
#3
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.
Cevapla
#4
(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!
WWW
Cevapla
#5
(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.
Cevapla
#6
(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!
WWW
Cevapla
#7
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...
WWW
Cevapla
#8
(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
WWW
Cevapla
#9
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.
Cevapla
#10
Size tam bir test ortamı sunalım, anlaşamadığımız konusunda anlaşmak için.  

Bunun benzerini C++ ile yapabilirsiniz.  Idea

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. Idea

 
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;




qe76yiekyryxuub1whzr.gif
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  nduWlanAPI Kullanımı hakkında nurah 3 806 09-09-2025, Saat: 09:33
Son Yorum: RAD Coder
  FMX de Tchart kullanımı mkucuktepe@msn.com 2 711 25-07-2025, Saat: 14:42
Son Yorum: mkucuktepe@msn.com
  HTTPRIO ile TLS 1.2 Kullanımı Nasıl Yapılabilir? hi_selamlar 6 3.078 01-08-2024, Saat: 14:33
Son Yorum: unicasoft
  FastReport'ta IFF Kullanımı Nasıl Yapabilirim ? Anarchosa 3 1.046 22-07-2024, Saat: 12:05
Son Yorum: QuAdR
  timer kullanimi hakkinda sadikacar60 11 2.074 28-04-2024, Saat: 19:33
Son Yorum: sadikacar60



Konuyu Okuyanlar: