Queryyi Nasil Hafizadan atabilirim ?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
spiderman
Üye
Mesajlar: 70
Kayıt: 02 Ara 2005 03:17

Queryyi Nasil Hafizadan atabilirim ?

Mesaj gönderen spiderman »

iyi haftasonlari,

TADOQuery ile M$SQL de ulastigim verileri hafizadan atmak icin

tadoquery1.Close;
tadoquery1.free;

yapiyorum. ama genede hafizadan atmiyor. baska bir yontemi varmi?
ylmz
Üye
Mesajlar: 110
Kayıt: 18 Mar 2005 02:32
Konum: Antalya

Mesaj gönderen ylmz »

merhaba,

atmadığını nerden anlıyorsunuz??
yaptığınız işlem doğru.
Kullanıcı avatarı
spiderman
Üye
Mesajlar: 70
Kayıt: 02 Ara 2005 03:17

Mesaj gönderen spiderman »

ayni query pespese 200 kereye yakin calistirmak zorunda kaliyorum. taskmanagerden baktigimda exenin kapladigi ram artmamakla birlikte free ram gozle gorurlur sekilde (10-20mb) dusuyor. programi kapattigimda ram geri geliyor. halbuki dosya kapandiginda ramde farklilik olmuyor.
Ali Erdoğan
Kıdemli Üye
Mesajlar: 1026
Kayıt: 11 Şub 2005 02:12
Konum: İstanbul

Mesaj gönderen Ali Erdoğan »

spiderman yazdı:ayni query pespese 200 kereye yakin calistirmak zorunda kaliyorum.
Hocam 200 kere çalıştırmak istiyorsunda her seferinde aç - kapa mı yapıyorsun?

Programın kapladığı ram artmadığına göre o söylediğin 10-15 mb ı Ms Sql Server tuttuğu cash ler için kullanıyor olmalı. Sende açık bir dataset olsa da olmasa da ADOConnection ın canlı bir bağlantı tuttuğunu unutma.
Kullanıcı avatarı
spiderman
Üye
Mesajlar: 70
Kayıt: 02 Ara 2005 03:17

Mesaj gönderen spiderman »

20 milyon kayit olan dosyadan farkli sekillerde kayit okuyorum bunu yapmak icinde runtimeda her seferinde create edip islemimi bitirip free edip tekrar create ediyorum.

query mantigini degisitrerek cozum bulabilirim ama bir aralar bir yerde bunla ilgili bir yazi gormustum. free nin yeterli olmadigini ramden tamamen atmak icin farkli komut kullanmak gerektigi yaziyordu. hatirlayamadigim icin sizlere danismak istedim.
Kullanıcı avatarı
spiderman
Üye
Mesajlar: 70
Kayıt: 02 Ara 2005 03:17

Mesaj gönderen spiderman »

http://groups.google.com.tr/group/borla ... rt=0&num=3 adresini konu ile ilgili incelemenizi tavsiye ederim.
D7, ADODB unit.
we use Jedi or memcheck to track if memory is lost or not. This tools
say that there is a problem in adodb unit when the tadoquery is freed.
So we checked the source code of the vcl and made some modifications:

destructor TADOCommand.Destroy;
begin
// we modified like this ==>
Connection := nil;
FCommandObject := nil;
FreeAndNil(FParameters);
// we modified : end
inherited Destroy;


{ // this is the original source code
Connection := nil;
FCommandObject := nil;
FreeAndNil(FParameters);}
end;


destructor TADOQuery.Destroy;
begin
// we modified like this ==>
FreeAndNil(FSQL);
// we modified : end
inherited Destroy;


// FreeAndNil(FSQL); // original source code
end;


Now: no more memory problem.
Do you think we can used our modifications? Do you agree with that?
---
These fixes are already present in D7 Update 1.
---
I've just passed the Delphi 7 update 1.
The VCL has not changed, the problem still exists.
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

spiderman yazdı:bir yerde bunla ilgili bir yazi gormustum. free nin yeterli olmadigini ramden tamamen atmak icin farkli komut kullanmak gerektigi yaziyordu.
Yok öyle birşey. Yanlış anlamışsın. FreeAndNil'in yaptığı şu. Hebe diye bir variable'da TEdit'in nesne pointer'i olsun. FreeAndNil(Hebe) yaptığında yaklaşık şu olur:
procedure FreeAndNil(var Nesne: TObject);
begin
Nesne.Free;
Nesne:= nil;
end;

Eğer Free ile bellek boşalmıyorsa nesnenin biryerlerinde Leak var demektir. Ama senin örneğinde, Exe mem boyutu değişmediğine göre böyle birşey yok.

Muhtemelen Windows arka planda Ado nesnelerini veya Winsock bağlantılarını cache'liyor.
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Aha son mesajını okumamışım. Evet TAdoQuery'de bir sorun var gibi görünüyor.

Muhtemelen sorun FreeAndNil(FSQL); 'in inherited Destroy'dan sonra yazılması.
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Kaynak koda göz attım. Borland'ın nesneyi Destroy etmesinden sonra, nesne variable'ını free etmesi çok ilginç. Böyle bir hata yapabileceğini düşünmezdim.
Cevapla