Queryyi Nasil Hafizadan atabilirim ?
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Queryyi Nasil Hafizadan atabilirim ?
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?
TADOQuery ile M$SQL de ulastigim verileri hafizadan atmak icin
tadoquery1.Close;
tadoquery1.free;
yapiyorum. ama genede hafizadan atmiyor. baska bir yontemi varmi?
-
- Kıdemli Üye
- Mesajlar: 1026
- Kayıt: 11 Şub 2005 02:12
- Konum: İstanbul
Hocam 200 kere çalıştırmak istiyorsunda her seferinde aç - kapa mı yapıyorsun?spiderman yazdı:ayni query pespese 200 kereye yakin calistirmak zorunda kaliyorum.
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.
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.
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.
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.
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:spiderman yazdı:bir yerde bunla ilgili bir yazi gormustum. free nin yeterli olmadigini ramden tamamen atmak icin farkli komut kullanmak gerektigi yaziyordu.
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.