Thread ve memory kullanımı hakkında

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
hdayi
Kıdemli Üye
Mesajlar: 1284
Kayıt: 29 Oca 2004 01:53
Konum: Erciyes'in eteklerinden.

Mesaj gönderen hdayi »

Hayır dll'im yok ama ne bileyim görünce dosayalrın içinde koyaladım gitti :oops: :oops: :oops:
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 »

Kendi yazdığın bir DLL yoksa veya yazdığın DLL içinde Delphi'ye özel tip yapılarını kullanmıyorsan FastMM veya BorlandMM'e ihtiyacın yok. :)

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

Mesaj gönderen hdayi »

http://delphi.about.com/od/objectpascal ... 03003a.htm
Burada bir makale gördüm az önce. Anladığım kadarı ile diyor ki: Uygulamanızda dll kullanırsanız bu dll kendi memory management sistemini kullanır ve problem olur. Diyor ve çözüm için bi takım şeyler öneriyor. Borland diyormuş ki, dll'lere string göndermeyin PCHar veya shortstring gönderin.

Dikkatimi çeken bişey oldu:
The dynamic-allocation functions most Delphi users are familiar with are GetMem(), FreeMem(), and New() and Dispose(). But actually many seemingly simple actions in Delphi can result in heap memory being allocated or deallocated. Among them:

* Object creation using a constructor
* Long string variables, and operations on them
* Operations on short string variables
* Creation and resizing of dynamic arrays
* String/array values in variants
* Explicit allocation using GetMem()/FreeMem(), New() and Dispose()
Şimdi acaba Thread'in contructor'ı mı buna sebeb oluyor? :roll: :roll: :roll:

Ben doğrudan dll, kullanmıyorum, TIdHttp kullanıyor ne kullanıyorsa. Ben Thread kullanıyorum. Threadi kaldırdım ve dosyayı doğrudan programın içinden indirdim. Memory kullanımı gayet düzgündü.

:roll: :roll: :roll:

[/url]
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 »

Bir de http://www.elists.org/pipermail/delphi/ ... 25126.html burayı buldum ki sanırım halim içler acısı.

Whenever you concatinate strings, (HTML generator apps are generally string processors right?) , you allocate and release memory. Whenever you create a class like a TList or TStringList, you also allocate and release memory. The manager that handles this memory allocation is SHARED across all the threads in your application. This means that Locks are placed on the memory manager, in fact, several when you start combining and splitting strings. The more your app does.. the more locks on this shared object occur and the slower your app becomes.
:cry: :cry: :cry:
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 »

Gerçekten de niye thread kullandın ki? Service programı yazmıyorsan client olarak yapıyorsan bu işi thread yazmanın anlamı var mı?
Gerçi tercih senin istersen yaparsın ama yine de iyi düşünmek lazım zira thread'ler düz program gibi senin istediğin zaman şak diye sonuçlanmıyorlar. Ayrı bir program gibi çalışıyorlar ve de dikkat edilmesi gereken bir çok konusu var.

İ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 »

Hocam dosya download ediyorum. Bu arada kullanıcı beklemsin işine devam etsin istiyorum.
Bu yüzden thread kullandım.
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 »

Download ederken başka işlem yapılmadığına emin misin?
Normalde internet (alma, gönderme) işlemlerinde application.processmessages olur, yani diğer işlemler devam eder diye hatırlıyorum. Belki de yanlış hatırlıyorum.

İ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 »

Tabii bazı ufak tefek işlemler de yapıyorum. Html Parsing, bazı string işlemleri vs. vs.
Ama az önce(Bu mesajı okumadan önce) bi thread kullanmadan denemeye karar verdim. Bakayım nasıl olacak.
Bişnev in ney çün hikâyet mîküned
Ez cüdâyîhâ şikâyet mîküned
Resim
Kullanıcı avatarı
undefined
Moderator
Mesajlar: 565
Kayıt: 06 Eki 2003 12:01
Konum: Bursa
İletişim:

Mesaj gönderen undefined »

hdayi yazdı:Bişey daha sorayım bununla ilgili. Bu dll dosyasını değiştirdiğim zaman, pas dosyasını yine eklemem gerekiyor mu? Yoksa sadece dll dosyasını değiştirmiş olmam yetiyor mu?
Kendi projende kullanmak için sadece FastMM4 ü projenin dpr'nin ilk uses ına eklemen yeterli. Delphi IDE'm biraz hızlansın diyorsan, Delphi\Bin e ide için olan BorlndMM.dll yi koyabilirsin. Bu zorunlu değil. Eğer Projende FastMM4 ü kullanmışsan ve DLL 'den longstring parametresi filam geçireceksen. Default gelend BorlndMM.dll yerine bu paketin içinden çıkan Forapplications directorysinin içindeki BorlndMM.dll yi kullanman lazım.

Kendi yazdığın bir DLL yoksa veya yazdığın DLL içinde Delphi'ye özel tip yapılarını kullanmıyorsan FastMM veya BorlandMM'e ihtiyacın yok. Smile
@Coderlord, FastShareMem ile Fastmm4 ü karıştırma. Fastmm4 normal projeler için memory manager oluyor. Sadece Dlller için değil.
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 sonsuz teşekkür ederim. @Hakan Can'ın dediğini yaptım. Meseley köklü bi çözüm getirdim. Thread kullanmaktan vaz geçtim (Zaten olur olmadık yere thread atmışım, 7-8 tane vardı kaldırana kadar hal geldi başıma).

TIdHttp bi dosyayı download ederken bekliyordu, ben de OnWork olayın bi Application.ProcessMessages koydum her bir TIdHttp'nin. Sonra ne kadar for, repaet until, while varsa hepsine de Application.ProcessMessages koydum ve hız açısından hiç bir farkı olmadı diyebilirim(yani çok az :) ).
Şu an test ediyorum, bi kaç arkadaşa daha verdim onlarda test ediyorlar. İnşallah bir problem çıkmayacak.

Tekrar tekrar teşekkürler...

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