Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите с ADO не освобождается память [D6, MSSQL]


Andrey000 ©   (2003-11-03 11:56:00) 

Проблемма такая не освобождается один дескриптор помогите :(
program s1;

{$APPTYPE CONSOLE}

uses
SysUtils,
ADODB,
ActiveX,
Classes,windows;

type
ms = class(TThread)
private
protected
aq1:TADOQuery;
error:boolean;
procedure Execute; override;
public
destructor Destroy;override;

end;

destructor ms.destroy;
begin
CoUnInitialize
aq1.free;
inherited destroy;
end;

procedure ms.Execute;
begin
CoInitialize(nil);
error:=false;
aq1:=TADOQuery.Create(nil);
aq1.ConnectionString:="driver={SQL Server}; server=serv; Database =master;Password=123;User ID=sa;";
aq1.CommandTimeout:=15;
aq1.Close;
aq1.SQL.Clear;
aq1.sql.Text:="use tempdb select * from dbo.syscolumns";
try
aq1.open;
except
error:=true;
end;
if error=true then
begin
end;
freeonterminate:=true;
end;

var fl:boolean;
begin
fl:=true;
repeat
ms.Create(false);
sleep(100000);
until fl=false;
end.


sniknik   (2003-11-03 17:28:00) [1]

aq1.free с CoUnInitialize местами поменял?

и делал бы все в Execute;

begin
CoInitialize(nil);
try
xxx :=TADOQuery.Create(nil);
try
...
while not Terminated do begin
try
aq1.open;
except
...
end;
...
sleep(100000);
end;
...
finally
xxx.Free;
end;
finally
CoUnInitialize;
end;
end;


Andrey000   (2003-11-03 15:49:00) [2]

добавил все равно потеря указателя :( млин


sniknik   (2003-11-03 13:37:00) [3]

> я испраил ситуация та же :(
и что получилось?
ADOConnection добавь, без него бывают странныу глюки(?) ситуации.


Andrey000   (2003-11-03 13:19:00) [4]

я испраил ситуация та же :(
кстати если не производить инициализацию в потоке то выдает ошибку


sniknik   (2003-11-03 13:16:00) [5]

в сервис-е тоже не обязательно свой поток создавать, он и так в отдельном потоке запускается, другое дело понадобилось бы их несколько.
(просто если ты так и перенесеш все с циклом, то бедные твои пользователи ;о)), не завидую я им)

> А это я так пока отлаживаюсь
а чего ошибки то не исправляеш?

кстати в первом посте (там можно не так понять)
освобождение ком обьекта (aq1.free) после разынициализации (CoUnInitialize) это именно ошибка.


Andrey000   (2003-11-03 12:54:00) [6]

Просто потом я этот поток в сервис вставлю. А это я так пока отлаживаюсь


sniknik   (2003-11-03 12:49:00) [7]

ну так и опрашивай кто тебе не дает, но не создавай для одного опроса отдельный поток, ну или хотя бы "заноси ему хвосты" в смысле убирай все что наплодил.
или вообще не пользуйся потоком, раз все одно цикл вставляеш.


Andrey000   (2003-11-03 12:39:00) [8]

так надо опрашивать базу каждые н секунд :)
я пробовал поставить и execute без деструктора все одна фигня


sniknik   (2003-11-03 12:24:00) [9]

а нафига тебе бесконечно большое количество потоков? да еще с незакрытой инициализацией (CoInitialize) в каждом? их количество (ин/анинициализаций) должно быть строго парным. + освобождение ком обьекта (aq1.free) после разынициализации (CoUnInitialize).


Наверх

Титульная страница Поиск, карта сайта Написать письмо