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

Вниз

Почему 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.038 c
14-1121345562
Almaz
2005-07-14 16:52
2005.08.07
"Вера" - однозначно ли это понятие ?


1-1121339525
-=snoop=-
2005-07-14 15:12
2005.08.07
как обрабатывается событие OnCreate ???????


1-1121395233
eXtreme
2005-07-15 06:40
2005.08.07
Обработчик событий компонента NMHTTP


1-1121755213
WondeRu
2005-07-19 10:40
2005.08.07
Ошибка при создании вариантного массива


14-1121769907
ЯВ
2005-07-19 14:45
2005.08.07
Небоскреб