![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Почему ADOTable не чистит за собой память ? [D7, ACCESS]
greySerg © (2005-07-01 12:03:00)есть такой код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses ADODB;
procedure TForm1.Button1Click(Sender: TObject);
var
at: TADOTable;
ac: TADOConnection;
begin
ac := TADOConnection.Create(nil);
ac.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;'+
'Data Source=D:\Expert2\NewData\expert.mdb;'+
'Persist Security Info=False;'+
'Jet OLEDB:System database=C:\System.mdw';
try
at := TADOTable.Create(nil);
try
at.Connection := ac;
at.TableName := 'M_DOCUMENT';
at.CursorType := ctOpenForwardOnly;
at.ReadOnly := True;
at.CursorLocation := clUseServer;
at.LockType := ltReadOnly;
at.TableDirect := true;
at.Open;
while not at.Eof do
begin
at.Next;
end;
finally
at.Close;
at.Free;
end;
finally
ac.Free;
end;
end;
end.
После прохода всей таблицы выделяется 13 Мб (см. в Windows Task Managere), но я же в конце прохода всё освобождаю (at.Free;), почему память не освобождается ?(в Windows Task Managere вижу те же 13 Мб, вместо 2 Мб, которые были в начале запуска приложения, перед нажатием на кнопку Button1)
Мастера, в чем может быть дело ? ADOTable не освобождает память за собой ?
P.S.: тестировал на Windows XP SP1
Ломброзо (2005-07-01 12:21:00) [1]greySerg (01.07.05 12:14)
> Johnmen
Как это не разорвал коннект , а ac.Free; что вы думаете означает ?
> Ломброзо
Да, Вы правы , свернул, развернул -и память уменьшилась , это винда не освобождает память занятым приложением, пока в этом нет необходимости , да ?
Я не знаю :) эмпирически замечено. Task manager частенько выдаёт температуру солнца или численность пингвинов, но только не действительно занятую память.
--------
DMJS 0.6 | http://dmjsclient.narod.ru
Digitman (2005-07-01 12:19:00) [2]
> greySerg
в-третьих, для BMM это нормально
greySerg (2005-07-01 12:14:00) [3]> Johnmen
Как это не разорвал коннект , а ac.Free; что вы думаете означает ?
> Ломброзо
Да, Вы правы , свернул, развернул -и память уменьшилась , это винда не освобождает память занятым приложением, пока в этом нет необходимости , да ?
Johnmen (2005-07-01 12:09:00) [4]Ну во первых, ты не разорвал коннект.
А во-вторых, ADO не освободит свои "кеши", пока не будет "деинициализировано", т.е. пока не завершишь своё приложение.
Ломброзо (2005-07-01 12:07:00) [5]greySerg (01.07.05 12:03)
есть такой код:
Сверните формочку.
Разверните формочку.
Доложите о результатах.
--------
DMJS 0.6 | http://dmjsclient.narod.ru