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