Главная страница
    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.46 MB
Время: 0.06 c
15-1143366721
inri13666
2006-03-26 13:52
2006.04.16
Как добовлять новые компоненты в BDS2006


2-1142495897
BlackDel
2006-03-16 10:58
2006.04.16
Работа с файлами


2-1144233076
dmitrlast
2006-04-05 14:31
2006.04.16
Люблю Delphi за его мощь


2-1143925921
AlexeyT
2006-04-02 01:12
2006.04.16
Установить шрифт при печати


1-1142248706
Пономарев Андрей
2006-03-13 14:18
2006.04.16
"Нити" и showmessage





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский