Форум: "Базы";
Текущий архив: 2005.08.07;
Скачать: [xml.tar.bz2];
ВнизПочему ADOTable не чистит за собой память ? Найти похожие ветки
← →
greySerg (2005-07-01 12:03) [0]есть такой код:
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:07) [1]greySerg (01.07.05 12:03)
есть такой код:
Сверните формочку.
Разверните формочку.
Доложите о результатах.
--------
DMJS 0.6 | http://dmjsclient.narod.ru
← →
Johnmen © (2005-07-01 12:09) [2]Ну во первых, ты не разорвал коннект.
А во-вторых, ADO не освободит свои "кеши", пока не будет "деинициализировано", т.е. пока не завершишь своё приложение.
← →
greySerg (2005-07-01 12:14) [3]> Johnmen
Как это не разорвал коннект , а ac.Free; что вы думаете означает ?
> Ломброзо
Да, Вы правы , свернул, развернул -и память уменьшилась , это винда не освобождает память занятым приложением, пока в этом нет необходимости , да ?
← →
Digitman © (2005-07-01 12:19) [4]
> greySerg
в-третьих, для BMM это нормально
← →
Ломброзо © (2005-07-01 12:21) [5]greySerg (01.07.05 12:14)
> Johnmen
Как это не разорвал коннект , а ac.Free; что вы думаете означает ?
> Ломброзо
Да, Вы правы , свернул, развернул -и память уменьшилась , это винда не освобождает память занятым приложением, пока в этом нет необходимости , да ?
Я не знаю :) эмпирически замечено. Task manager частенько выдаёт температуру солнца или численность пингвинов, но только не действительно занятую память.
--------
DMJS 0.6 | http://dmjsclient.narod.ru
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.08.07;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.035 c