Текущий архив: 2003.11.24;
Скачать: CL | DM;
Вниз
Помогите с ADO не освобождается память Найти похожие ветки
← →
Andrey000 (2003-11-03 11:56) [0]Проблемма такая не освобождается один дескриптор помогите :(
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 12:24) [1]а нафига тебе бесконечно большое количество потоков? да еще с незакрытой инициализацией (CoInitialize) в каждом? их количество (ин/анинициализаций) должно быть строго парным. + освобождение ком обьекта (aq1.free) после разынициализации (CoUnInitialize).
← →
Andrey000 (2003-11-03 12:39) [2]так надо опрашивать базу каждые н секунд :)
я пробовал поставить и execute без деструктора все одна фигня
← →
sniknik (2003-11-03 12:49) [3]ну так и опрашивай кто тебе не дает, но не создавай для одного опроса отдельный поток, ну или хотя бы "заноси ему хвосты" в смысле убирай все что наплодил.
или вообще не пользуйся потоком, раз все одно цикл вставляеш.
← →
Andrey000 (2003-11-03 12:54) [4]Просто потом я этот поток в сервис вставлю. А это я так пока отлаживаюсь
← →
sniknik (2003-11-03 13:16) [5]в сервис-е тоже не обязательно свой поток создавать, он и так в отдельном потоке запускается, другое дело понадобилось бы их несколько.
(просто если ты так и перенесеш все с циклом, то бедные твои пользователи ;о)), не завидую я им)
> А это я так пока отлаживаюсь
а чего ошибки то не исправляеш?
кстати в первом посте (там можно не так понять)
освобождение ком обьекта (aq1.free) после разынициализации (CoUnInitialize) это именно ошибка.
← →
Andrey000 (2003-11-03 13:19) [6]я испраил ситуация та же :(
кстати если не производить инициализацию в потоке то выдает ошибку
← →
sniknik (2003-11-03 13:37) [7]> я испраил ситуация та же :(
и что получилось?
ADOConnection добавь, без него бывают странныу глюки(?) ситуации.
← →
Andrey000 (2003-11-03 15:49) [8]добавил все равно потеря указателя :( млин
← →
sniknik (2003-11-03 17:28) [9]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;
Страницы: 1 вся ветка
Текущий архив: 2003.11.24;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.01 c