Главная страница
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.06 c
1-1121415307
Destroyer
2005-07-15 12:15
2005.08.07
Как сделать такую кнопку?


8-1112757340
poha
2005-04-06 07:15
2005.08.07
Gif


9-1113998028
Comrade
2005-04-20 15:53
2005.08.07
Как "забобахать" мегопростую игр


4-1118237156
KonstantinXaker(KX)
2005-06-08 17:25
2005.08.07
Найти значение в строке и заменить его


14-1121336338
Тульский
2005-07-14 14:18
2005.08.07
Стандартные пиктограммы Win2k