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

Вниз

Stream   Найти похожие ветки 

 
Evgeny ©   (2003-08-07 10:04) [0]

Подскажите, кто сталкивался. Когда у потока происходит ошибка "EStreamError" с сообщением "Out of memory while expanding memory stream". При этом заполнение потока на уровне 14 Мб. Заполнение потока происходит методом CopyFrom из другого потока. Памяти в машине больше некуда.


 
Skier ©   (2003-08-07 10:06) [1]

А код мы увидим ? Али как ?


 
Evgeny ©   (2003-08-07 10:08) [2]

Заполнение потока происходит методом "CopyFrom" из другого потока. Этого разве мало?


 
Skier ©   (2003-08-07 10:12) [3]

Мало.


 
Digitman ©   (2003-08-07 10:13) [4]


> Памяти в машине больше некуда


размер ОЗУ имеет малое отношение к сабжу.
значит, в момент загрузки результирующего потока в ВАП твоего процесса нет свободного непрерывного региона размером большего или равного запрошенного при реаллокации памяти под рез.поток


 
Evgeny ©   (2003-08-07 10:15) [5]

Ну примерно так, но что это изменяет:
for I := 0 to XXX do
begin
...
Stream.CopyFrom(TempStream, Size);
// при достижение 14 Мб, ошибка
...
end;


 
Skier ©   (2003-08-07 10:16) [6]

for I := 0 to XXX do
begin
...
Stream.Position := 0; //иначе XXX*Size !
Stream.CopyFrom(TempStream, Size);
// при достижение 14 Мб, ошибка
...
end;


 
Evgeny ©   (2003-08-07 10:17) [7]

>Digitman © (07.08.03 10:13)

тогда только один выход. Вместо TStream использовать TFileStream.


 
MBo ©   (2003-08-07 10:19) [8]

Size или SetSize на разумный размер перед заполнением не поможет?


 
Evgeny ©   (2003-08-07 10:20) [9]

>Skier © (07.08.03 10:16)

Stream.Position := 0; //иначе XXX*Size !

ни в коем случае, мне именно накопление требуется. Где то порядка 40 Мб.


 
Skier ©   (2003-08-07 10:22) [10]

>Evgeny © (07.08.03 10:20)
Понял. Тогда посмотри MBo © (07.08.03 10:19)


 
Evgeny ©   (2003-08-07 10:24) [11]

>MBo © (07.08.03 10:19)

Размер заранее неизвестен. Происходит поточная обработка файлов из каталога в один файл. Количество и размер файлов неизвестен. То что я ранее написал 40 Мб - это так для примера может быть гораздо больше. Скорее всего TFileStream единственный выход.


 
Digitman ©   (2003-08-07 10:28) [12]


> Evgeny


так во многих подобных случаях и поступают - используют THandleStream... например, тот же (самый известный) его наследник - TFileStream


 
Anatoly Podgoretsky ©   (2003-08-07 10:30) [13]

А это что тогда такое Size?


 
Evgeny ©   (2003-08-07 10:36) [14]

>Anatoly Podgoretsky © (07.08.03 10:30)
А это что тогда такое Size?

Не понял, что то не так?


 
Skier ©   (2003-08-07 10:37) [15]

>Evgeny © (07.08.03 10:36)
Может быть так :
Stream.CopyFrom(TempStream, TempStream.Size); ?


 
Evgeny ©   (2003-08-07 10:39) [16]

Я написал псевдо-код, а не рабочий.


 
Skier ©   (2003-08-07 10:41) [17]

>Evgeny © (07.08.03 10:39)
Тогда ты будешь получать псевдо-ответы


 
Evgeny ©   (2003-08-07 10:45) [18]

Ответ я уже получил, спасибо всем за участие. А псевдо-код - это не обязательно бред, чаще всего это упрощенный код, нужный для понятия логики работы.


 
Serginio1   (2003-08-07 12:51) [19]

Посмотри
http://www.1c.hippo.ru/cgi-bin/predownl.cgi?id=2019

Там есть MemoryStream для работы с большими объемами. Отличие от обыкновенного в том, что используе память блоками а не непрерывную как в TMemoryStream. При использовании непрерывной памяти происходит проблемы с перераспределением оной.


 
Evgeny ©   (2003-08-08 11:35) [20]

>Serginio1 (07.08.03 12:51)

Понял, спасибо, посмотрю.



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

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

Наверх




Память: 0.51 MB
Время: 0.014 c
1-68309
Ткаченко Сергей
2003-08-06 14:23
2003.08.21
Поиск файлов в директории


14-68443
Vlad Oshin
2003-08-04 15:02
2003.08.21
Понедельник... :)


9-68139
Anlide
2003-02-19 03:29
2003.08.21
Как в D3D сделать правелное отображение мыши?


14-68512
Yuraz
2003-08-05 16:58
2003.08.21
Прикрыли на работе лазейку к ICQ, посоветуете


7-68572
Pliajnik
2003-06-07 12:35
2003.08.21
Как распечатать на принтере StringGrid c данными?