Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблема с освобождением памяти [D5, Win2k]


Страницы:   1 2 3

Duncan ©   (2004-06-16 15:23:00) 

Я создаю список, через некоторое время кидаю его в БД и освобождаю. Но в результате оперативка тает на глазах и не освобождается. Освобождается она только после завершения программы, но т.к. мне нужен сервис, то соответственно постоянно оперативка пожирается при попытке обработать очередной файл. Вот структура и процедура уничтожения списка:

//По горизонтали идет идут данные PTIP_B, для каждого из которого в низ идут данные типа PTIP_A.
type Traf=record
 IP_A, IP_B:longword;
 ASN_A, ASN_B, INT_A, INT_B:word;
 BYTES_A, BYTES_B: longword;
 DT: TDateTime;
 end;

 PTIP_A=^TIP_A;
 TIP_A=record
   down:PTIP_A;
   IP_A:longword;
   INT_A, int_B, ASN_A, ASN_B:word;
   BYTES_A, BYTES_B: longword;
   DT: TDateTime;
   end;

 PTIP_B=^TIP_B;
 TIP_B=record
   next:PTIP_B;
   down:PTIP_A;
   IP_B:longword;
   end;

procedure SaveAndDestroy;
var
 i, count:integer;
 p,p1:PTIP_B;
 a,a1:PTIP_A;
begin
 new(p);
 wtr.StartTransaction;
 for i:=0 to 255 do begin
   p:=arrpoint[i];
   while (p<>nil) do begin
     new(a); a:=p^.down;
     while (a<>nil) do begin
       with qIns do begin
         //Пишем в бд
         end;
       inc(count);
       if count>700 then begin
         wtr.Commit; count:=count-700;
         wtr.StartTransaction; end;
       new(a1); a1:=a;
       a:=a^.down; dispose(a1);
       end;
     dispose(a); new(p1);
     p1:=p; p:=p^.next; dispose(p1); end;
   arrpoint[i]:=nil; end;
 wtr.Commit;
 dispose(p);
end;


Sandman25   (2004-06-16 15:26:00) [41]

В алгоритме куча ошибок.
Например, зачем  new(p), если сразу выполняется  p:=arrpoint[i];


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо