Вниз
Скачать: 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 вся ветка

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



Память: 0.49 MB
Время: 0.015 c
14-68442
Лёша
2003-08-04 11:39
2003.08.21
МУЖИКИ, есть ли способ сделать форму не только активной


14-68531
Vlad Oshin
2003-08-05 10:56
2003.08.21
Глючит ZIP. iomega IDE на 250 мб


3-68150
Sergeyy
2003-07-25 13:23
2003.08.21
DBGrid внутри DBCtrlGrid


1-68318
Рубинштейн
2003-08-08 19:11
2003.08.21
Горизонтальная полоса прокрутки в TListbox


3-68249
sashag
2003-07-25 17:17
2003.08.21
Interbase DBLookupCombobox




   Наверх