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

Вниз

Освобождение строк.   Найти похожие ветки 

 
Erik1 ©   (2006-03-29 11:50) [0]

Я сделал буфер для потоков который представляет из себя список:
MyBuf = record
 Value: String;
 _Time: Cardinal;
end;
Создаю record с поможю New освобождаю Dispose.
BufList.Put(Doc.GetLine); //добавляю сторку
BufList.Get(Value); //удаляю строку
Коректно ли удаляется строка(Item.Line) и освобождается память под нее?

Используеме процедуры.
procedure TBufList.Put(const Value: String);
Var
 DataBuf: PDataBuf;
begin
 FLock.BeginWrite;
 try
   New(DataBuf);
   DataBuf.Line := Value;
   DataBuf._Time := DateTimeToTimeStamp(Time).Time;
   fData.Add(DataBuf);
 finally
   FLock.EndWrite;
 end;
end;

function TBufList.Get(var Value: String): Boolean;
Var
 DataBuf: PDataBuf;
   i: Integer;
begin
 FLock.BeginWrite;
 try
   i := Count;
   Result := i > 0;
   if Result then
   begin
    Value := Items[i-1].Line;
    Delete(i-1);
   end;
 finally
   FLock.EndWrite;
 end;

end;

procedure TBufList.Delete(Index: Integer);
Var
   Item: PDataBuf;
begin
 Item := Items[Index];
 SetLength(Item.Line, 0);

 FData.Delete(Index);
 Dispose(Item);
 Item := nil;
end;


 
MBo ©   (2006-03-29 12:16) [1]

Да, корректно. Dispose вызывает Finalize


 
Deka ©   (2006-03-29 12:18) [2]

Вроде правильно, только я бы предпочёл вместо SetLenght использовать Finalize.


 
MBo ©   (2006-03-29 12:29) [3]

не нужно ни SetLength, ни Finalize


 
Erik1 ©   (2006-03-29 12:40) [4]

Большое спасибо.

По поводу переноса темы:
Вы бы еще ее в раздел для грудничков перенесли! Видать тут все гении и многопоточное прогамирование и внутрений механим менаджера памяти все знают как Отче наш.


 
Ega23 ©   (2006-03-29 12:43) [5]

Вроде всё нормально. Только лично я бы вместо record завёл бы class.


 
begin...end ©   (2006-03-29 12:50) [6]

> Erik1 ©   (29.03.06 12:40) [4]

Извините, но для того, чтобы ответить на Ваш вопрос, вовсе не обязательно досканально представлять себе механизм работы менеджера памяти.

Более того — этот механизм здесь вообще ни при чём. Нужно выяснить, будет ли автоматически финализирована строка или нет. А то, как именно будет освобождена память (а это и есть внутренний механизм), в данном случае неважно.

Достаточно прочитать справку по FreeMem. И, может быть, для уверенности заглянуть в окно CPU.


 
Erik1 ©   (2006-03-29 13:02) [7]

Странно по тестам 56 байт кудато деваются после каждой обработки.



Страницы: 1 вся ветка

Текущий архив: 2006.04.16;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.053 c
1-1142341226
kyn66
2006-03-14 16:00
2006.04.16
В чем ошибка загрузки Waw-файла ?


2-1144076106
TimScorp
2006-04-03 18:55
2006.04.16
Объединение таблиц для создания отчета


15-1143217541
Ученик чародея
2006-03-24 19:25
2006.04.16
Принтсервер Surecom EP-903X-U печать из DOS-а.


4-1138123111
Игорь Степанов
2006-01-24 20:18
2006.04.16
Использование функции GetTickCount для создания задержки в 8 мсе


15-1143353614
Parus
2006-03-26 10:13
2006.04.16
В низу экрана, где "Пуск"...