Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.06;
Скачать: CL | DM;

Вниз

Как правильно освобождать память из-под COM/ActiveX?   Найти похожие ветки 

 
BaSergey   (2002-12-23 18:05) [0]

Ситуация такая: работаю с ADO в Delphi3 через Import type library...
Мне надо вызвать 201 раз одну хранимую процедуру - обычная ADO-шная команда, возвращает Recordset с результатами:
Cmd:= CoCommand.Create;
Cmd.ActiveConnection:= MyConn;
Cmd.CommandText:= "my_SP";
Cmd.CommandType:= adCmsStoredProc
Cmd.Parameters.Refresh;
for i:=0 to 200 do
begin
Cmd.Parameters["CoolParam"].Value:= i;
RS:= Cmd.Execute(...);
Process(RS.Fields["CoolReturn"].Value);
RS.Close;
end;



В общем, типа того... И в процессе выполнения в Task Manager видно, что память выделяется, но не освобождается! .

Чего ему надо? Кто знает - как правильно освобождать память из-под COM/ActiveX?


 
asmith   (2002-12-23 18:29) [1]

Нужно освободить все интерфейсные ссылки, в данном случае
Cmd := nil;


 
Fantasist ©   (2002-12-24 01:57) [2]

Делфи сам проследить за ссылками; обнулять их не обязательно - при уничтожении интерфейсной переменной будет вызван Release. Конечно, если эта переменная живет долго, то можно ее обнулить, форсирую вызов Release. Однако:

1) Уничтожение СОМ объекта не гарантирует выгрузку библиотеки в которой он живет. Для форсирования этого дела надо либо вызвать CoUninitialize(что нежелательно - функциями СОМ нельзя будет пользоваться; Делфи вызывает эту API сам секции финализации), либо вызывать CoFreeUnusedLibraries.
2) Освобождаемая менеджером памяти процесса память возращается менеджеру памяти, а не системе. То есть со стороны системы может выглядеть так, как будто память и не освободилась. У длл, естессвенно, свой менеджер памяти.



Страницы: 1 вся ветка

Текущий архив: 2003.01.06;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.046 c
14-15250
Axis_of_Evil
2002-12-16 11:17
2003.01.06
А есть ли среди местных геймеры ?


6-15199
Di_wind
2002-11-08 14:34
2003.01.06
Старая тягомотина(WebBrowser)


3-14967
Rule
2002-12-12 00:32
2003.01.06
Помогите конвертировать таблицы


6-15187
brestmarket
2002-11-06 14:25
2003.01.06
WebBrowser1.ExecWB(OLECMDID_PRINTPREVIEW, 0) в свернутом виде?!


3-14924
DKalinin
2002-12-10 15:13
2003.01.06
как забрать данные из select, который выполняется в хранимой проц