![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите с 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).