Thread ve memory kullanımı hakkında

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

Aslında sorun yok. Sorun olarak algıladığın şey şu:
TDownLoadURL'yi kullandığın anda program otomatik olarak bir DLL'i yüklüyor (UrlMonLib adında). O yüzden hafıza birden artıyor.
"ExtActns" unit'ini incelersen orada göreceksin.

İyi çalışmalar.
Kullanıcı avatarı
hdayi
Kıdemli Üye
Mesajlar: 1284
Kayıt: 29 Oca 2004 01:53
Konum: Erciyes'in eteklerinden.

Mesaj gönderen hdayi »

Hakan Can yazdı:Aslında sorun yok. Sorun olarak algıladığın şey şu:
TDownLoadURL'yi kullandığın anda program otomatik olarak bir DLL'i yüklüyor (UrlMonLib adında). O yüzden hafıza birden artıyor.
"ExtActns" unit'ini incelersen orada göreceksin.

İyi çalışmalar.
Tamam ama download bittikten sonra memory'nin eski haline gelmesi gerekmez mi? Ben de gelmiyor.

CUma'dan sonra @gkimirti'nin tavsiye ettiği fonksiyonu deneyeceğim. Hayırlısı inşallah...
Bişnev in ney çün hikâyet mîküned
Ez cüdâyîhâ şikâyet mîküned
Resim
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

Hayır gerekmiyor. Zira dediğim unit'i incelersen orada göreceksin. DLL finalization bölümünde Free ediliyor yani program kapanırken.

İyi çalışmalar.
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Öyle bir kural yok. Windows'un keyfi ne zaman isterse o zaman unload yapar. Muhtemelen senin program kapatılınca yapacaktır.
Kullanıcı avatarı
hdayi
Kıdemli Üye
Mesajlar: 1284
Kayıt: 29 Oca 2004 01:53
Konum: Erciyes'in eteklerinden.

Mesaj gönderen hdayi »

Ama o zaman bu memory kullanımı sonsuza kadar devam edebilir. Basit bir program yüzünden kullanıcının başı ağrımaz mı? Hay ben bu windows'un
Zaten yakında linux'e geçecem o olacak.
Bişnev in ney çün hikâyet mîküned
Ez cüdâyîhâ şikâyet mîküned
Resim
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Hayır hayır. DLL'i bir kere yükler. Senin programlar haricinde başka programlar da bunu kullanabilir.
Kullanıcı avatarı
hdayi
Kıdemli Üye
Mesajlar: 1284
Kayıt: 29 Oca 2004 01:53
Konum: Erciyes'in eteklerinden.

Mesaj gönderen hdayi »

Arkadaşlar hepinize teşekkür ederim. Programın kullandığı ram hala artıyor ama aşır değil. 24 saatte 4 mb gibi bi artış oldu. Sanırım buna da normal dememiz gerekiyor.

Hepinize teşekkür ederim.
Bişnev in ney çün hikâyet mîküned
Ez cüdâyîhâ şikâyet mîküned
Resim
turkcanfidan
Üye
Mesajlar: 380
Kayıt: 31 Eki 2005 03:26

Mesaj gönderen turkcanfidan »

Merhaba, Program kodunun kullandığınız en son halini yazabilir misiniz?







.
Kullanıcı avatarı
hdayi
Kıdemli Üye
Mesajlar: 1284
Kayıt: 29 Oca 2004 01:53
Konum: Erciyes'in eteklerinden.

Mesaj gönderen hdayi »

Merhaba,

4 Adet TImage nesnesi var

Kod: Tümünü seç

    thrImgDownload.Create('http://www.meteor.gov.tr/2003/iller/set7/kayseris.aspx', 'd:\tmps.gif', Image1);
    thrImgDownload.Create('http://www.meteor.gov.tr/2003/iller/set7/kayseri1.aspx', 'd:\tmp1.gif', Image2);
    thrImgDownload.Create('http://www.meteor.gov.tr/2003/iller/set7/kayseri2.aspx', 'd:\tmp2.gif', Image3);
    thrImgDownload.Create('http://www.meteor.gov.tr/2003/iller/set7/kayseri3.aspx', 'd:\tmp3.gif', Image4);
diyerek her bir image için 1 kere thread'i create ediyorum.

Thread ise şöyle:

Kod: Tümünü seç

constructor thrImgDownload.create(url, ldosya: string; img: Timage);
begin
    inherited create(True);
    FreeOnTerminate := True;
    thrurl := url;
    thrldosya := ldosya;
    thrImg := img;
    Priority := tpLowest;
    resume;
end;

procedure thrImgDownload.Execute;
var
    Dosya: TFileStream;
    httpclient: Tidhttp;
begin
    try
       dosya := TFileStream.create(thrldosya, fmCreate);
       try
          httpclient := TIdHTTP.Create(nil);
          try
             httpclient.ReadTimeout:=5000;
             httpclient.Get(thrurl, dosya);
          finally
             httpclient.Free;
          end;
       finally
          dosya.Free;
       end;
       Synchronize(ImajYukle);
    except
        // Event handler konulabilir. Misal Synchronize(DoException);
    end;
end;

procedure thrImgDownload.ImajYukle;
begin
    thrImg.Picture.LoadFromFile(thrldosya);
    DeleteFile(thrldosya);
end;
Bişnev in ney çün hikâyet mîküned
Ez cüdâyîhâ şikâyet mîküned
Resim
turkcanfidan
Üye
Mesajlar: 380
Kayıt: 31 Eki 2005 03:26

Mesaj gönderen turkcanfidan »

Teşekkürler, fikir güzel...



.
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

hdayi yazdı:Programın kullandığı ram hala artıyor ama aşır değil. 24 saatte 4 mb gibi bi artış oldu. Sanırım buna da normal dememiz gerekiyor.
Artış devam ediyorsa normal değil. Başının ağrımaması için, artış hala varsa, durmuyorsa kontrol etmeni tavsiye ederim.

Programın bu bölümünün leak yaptığından emin misin? Sadece bu bölümü ayrı bir uygulama olarak çalıştırıp deneyebilir misin? Belki gözden kaçırdığın başka bir yerde sorun vardır.
Kullanıcı avatarı
hdayi
Kıdemli Üye
Mesajlar: 1284
Kayıt: 29 Oca 2004 01:53
Konum: Erciyes'in eteklerinden.

Mesaj gönderen hdayi »

Buraya yazdığımdan beri bu bölümü ayrı bir uygulama olarak deniyorum. Ama olmadı. Yani dll yüklediğinde de 1 sefer yüklemesi lazım, her seferin de değil. Ama biçare kaldım.
Bişnev in ney çün hikâyet mîküned
Ez cüdâyîhâ şikâyet mîküned
Resim
Kullanıcı avatarı
hdayi
Kıdemli Üye
Mesajlar: 1284
Kayıt: 29 Oca 2004 01:53
Konum: Erciyes'in eteklerinden.

Mesaj gönderen hdayi »

Bu arada, ben hep IdHttp'nin bir problemi mi var diye saplantı yapmıştım ama sonradan aklıma geldi. @gkimirti'nin gönderdiği kodda da aynı problem vardı. Ve o kod IdHttp kullanmıyor.

Daha programcı olmadan bırakasım geldi programcılığı
Bişnev in ney çün hikâyet mîküned
Ez cüdâyîhâ şikâyet mîküned
Resim
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Sen Delphi'nin hangi sürümünü kullanıyorsun?
Kullanıcı avatarı
hdayi
Kıdemli Üye
Mesajlar: 1284
Kayıt: 29 Oca 2004 01:53
Konum: Erciyes'in eteklerinden.

Mesaj gönderen hdayi »

Delphi 7
Bişnev in ney çün hikâyet mîküned
Ez cüdâyîhâ şikâyet mîküned
Resim
Cevapla