Форум: "Начинающим";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];
Вниз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 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.06 c