Вниз
Скачать: CL | DM;

TMemoryStream и расход памяти   Найти похожие ветки 

← →
Проггер из библиотеки   (2006-10-29 15:45) [0]

Вчера писал такое:

procedure TForm1.Button1Click(Sender:TObject);
var
InFile,OutFile:TMemoryStream;
begin
Infile:=TMemoryStream.Create;
OutFile:=TMemoryStream.Create;
InFile.LoadFromFile("<Здесь была переменная с именем файла, полученным изи TOpenDialog>");
DoSomething(InFile,OutFile);
DoSomething(OutFile,InFile);
{Дальше в качестве эксперимента последние две строки повторялись несколько раз}
{Обработка результатов}
Infile.Free; OutFile.Free;
end;

DoSomething - процедура, первый параметр - const, второй - var, т.е. возвращаемый. Второй MemoryStream в этой процедуре очищается (MemStream.Clear) и потом заполняется видоизменённой информацией, двоичной, и первого МемСтрима. Но почему-то с каждым разом работа этой процедуры замедлялась, а разе на десятом - вообще вывело сообщение о том, что не хватает памяти. В чём может быть прикол?


← →
Орион ©   (2006-10-29 15:55) [1]

> процедура, первый параметр - const, второй - var, т.е. возвращаемый.

убери var


← →
Проггер из библиотеки   (2006-10-29 15:56) [2]

Он же всё равно будет возвращать изменённым?


← →
Eraser ©   (2006-10-29 16:03) [3]

> [1] Орион ©   (29.10.06 15:55)

только это ничего не даст )

> [2] Проггер из библиотеки   (29.10.06 15:56)

конечно, идентификатор объекта это только указатель.


← →
Проггер из библиотеки   (2006-10-29 16:03) [4]

> [3]
А что может дать?


← →
Орион ©   (2006-10-29 16:05) [5]

> [4] Проггер из библиотеки   (29.10.06 16:03)

приведи код DoSomething


← →
Eraser ©   (2006-10-29 16:06) [6]

> [4] Проггер из библиотеки   (29.10.06 16:03)

в данном случае - ничего )


← →
Проггер из библиотеки   (2006-10-29 16:10) [7]

procedure TMyComponent.DoSomething(const InStream:TMemoryStream; var OutStream:TMemoryStream);
var
Tmp:aarray [1..8] of Byte;
begin
OutStream.Clear; InStream.Position:=0;
while InStream.Position+8<=InStream.Size do
begin
 InStream.Read(Tmp,8);
 {Дальше обрабатываем содержимое Tmp, на выходе - не более 9 байт, которые сразу записываем в OutStream}
end;
{Последние необработанные байты, если таковые остались - просто добавляем в OutStream}
end;


← →
Орион ©   (2006-10-29 16:26) [8]

о! а строка Infile.Free; OutFile.Free; точно исполняется?


← →
Проггер из библиотеки   (2006-10-29 16:28) [9]

Да, но это и не могло быть проблемой: там нет никаких Exit"ов и т.п.


← →
Проггер из библиотеки   (2006-10-29 16:52) [10]

Мастера, ещё идеи есть?

Как вообще можно стримами обрабатывать большие объёмы информации?


← →
MetalFan_pda   (2006-10-29 16:58) [11]

как определил утечку памяти? приведенный код не должен кушать лишнее->косяк в другом месте...


← →
Anatoly Podgoretsky ©   (2006-10-29 17:19) [12]

> Ответ на сообщение [9]

Основание, защитных блоков нет.



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

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.028 c
15-1161767460
Elen
2006-10-25 13:11
2006.11.12
Можно ли войти в нерасшаренную папку


2-1161773761
kulkse
2006-10-25 14:56
2006.11.12
частная очередь сообщений


2-1161841281
XTD
2006-10-26 09:41
2006.11.12
Посоветуйте хорошую компоненту по работе с *.DBF базами.


3-1158107950
NikAl
2006-09-13 04:39
2006.11.12
Компонента KeyDB


1-1159734305
RWolf
2006-10-02 00:25
2006.11.12
Программа выпадает в режим отладки




   Наверх