![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Гость_Alexander |
|
|||
|
Unregistered |
Народ, как правильно очистить запись/все записи в TList? Проблема в том что выделяя память инструкцией New для очередной записи в TList, после выполнения инструкции List.Delete(n)или List.Clear память, выделенная под записи, не высвобождается… Например попробуйте кусок кода и запустите диспетчер задач, обратите внимание на расход памяти… Или может я чего-то не понимаю?
Type Rtest=Record a:Array[0..1024*10] of byte; end; PTest=^Rtest; procedure TForm1.Timer1Timer(Sender: TObject); var test:PTest; begin New(Test); List.Add(Test); List.Clear; end; |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 15 Всего: 98 |
а с чего бы ей освобождаться?
Clear() только внутри компонента память чистит. а все самим-собой выделенное и чистить самому нужно -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Zero |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2169 Регистрация: 23.10.2004 Где: Россия, г. Рязань Репутация: 8 Всего: 24 |
Гость_Alexander, для очистки динамической памяти используй процедуру: Dispose.
Пример:
Аналогично и ствоим примером. Это сообщение отредактировал(а) Zero - 20.11.2004, 21:46 |
|||
|
||||
| Guest |
|
|||
|
Unregistered |
Что то, коллеги, ничего не получается. Вот кусок из реальной программы. Память рассходуется со скоростью звука
Type RNetFile=record UserName, FileName:WideString; FileNameID:DWord; StatusOpen:DWord; TimeBegin,TimeEnd:TDateTime; end; PNetFile=^RNetFile; Procedure TForm1.Clear; begin While List.Count<>0 do begin Finalize(List.Items[List.Count-1]^); Dispose(List.Items[List.Count-1]); List.Delete(List.Count-1); end; |
|||
|
||||
| Гость_Alexander |
|
|||
|
Unregistered |
Забыл кусок...
procedure TForm1.Timer1Timer(Sender: TObject); var test:PNetFIle; r:integer; begin for r:=1 to 100 do begin New(Test); Test^.UserName:='?????????????'; Test^.FileName:='C:\Download.html'; Test^.FileNameID:=34; Test^.StatusOpen:=99; List.Add(Test); end; Clear; end; |
|||
|
||||
| Zero |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2169 Регистрация: 23.10.2004 Где: Россия, г. Рязань Репутация: 8 Всего: 24 |
Короче, я пока не проверял твою прогу, но сразу могу сказать замечание по поводу указания типов: Если, ты какому-нибудь идентификатору присваеваеш тип указатель, то эту строку надо писать до создания самого типа на который указывает указатель а не после.
Поэтому, попробуй написать так:
А так как ты выслал кусок проги, то я по нему немогу, нормально сорентироватся, поэтому над остальным участком попробуй сам подумать, если не получится то пиши... |
|||
|
||||
| Гость_Alexander |
|
|||
|
Unregistered |
Чуствую что для компилятора это значения не имеет (Шустрый). А вот что люди добрые подсказали, может кому нибудь интересно будет и познавательно... Всем спасибо и огромный respect... И так сточку:
Finalize(List.Items[List.Count-1]^); Dispose(List.Items[List.Count-1]); необходимо заменить на: Dispose(PNetFIle(List.Items[List.Count-1])); А это так, мысли в слух, не ужели никто не встречался с такой проблемой, не уж то ни кто не следит за расходом памяти? ------------------------------------------- Все гениальноее ну очень просто |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |