out of memory while expanding memory stream что делать

Out of memory while expanding memory stream что делать

При записи в поток TMemoryStream методом writeBufer возникает ошибка «Out of memory while expanding memory stream». Запись в поток осуществляется в цикле
For i:=1 to N do
begin
TMemoryStream.writebuffer(x,Sizeof(x));
end;
Число N равно 150-200 тыс.
Данных где-то около 40-50Мб.
Что можно сделать, чтобы ошибки не возникало. Заранее спасибо.

out of memory while expanding memory stream что делатьout of memory while expanding memory stream что делать
Smithson ( 2003-03-14 16:31 ) [1]

Что значит Out of memory?

out of memory while expanding memory stream что делатьout of memory while expanding memory stream что делать
Anatoly Podgoretsky ( 2003-03-14 16:38 ) [2]

А что значит Sizeof(x)

out of memory while expanding memory stream что делатьout of memory while expanding memory stream что делать
Сергей ( 2003-03-14 16:42 ) [3]

re: Что значит Out of memory?
Это типа не хватает памяти, а вообще в тексте приведен текст ошибки.

out of memory while expanding memory stream что делатьout of memory while expanding memory stream что делать
theodor_iv ( 2003-03-14 16:52 ) [4]

Тебе изначально зачем две копии одних и тех же данных в оперативной памяти, да еще по 50 мегабайт каждая?

out of memory while expanding memory stream что делатьout of memory while expanding memory stream что делать
Сергей ( 2003-03-14 16:55 ) [6]

theodor_iv © : Данные пишутся из массива в поток, а затем записываюся в файл.

out of memory while expanding memory stream что делатьout of memory while expanding memory stream что делать
Anatoly Podgoretsky ( 2003-03-14 16:56 ) [7]

Ну так все таки, чего молчишь про Sizeof(x)

out of memory while expanding memory stream что делатьout of memory while expanding memory stream что делать
theodor_iv ( 2003-03-14 16:57 ) [8]

Я так и думал. А почему нельзя их сразу записать в TFileStream?

out of memory while expanding memory stream что делатьout of memory while expanding memory stream что делать
Сергей ( 2003-03-14 16:59 ) [9]

Digitman ©: Сначала данные из текстового файла пишуться в динамический массив, а далее, чтобы каждый раз не загружать эти данные из текстового файла (потому что очень долго), я хочу их записывать в своем формате, в двоичном файле. Загрузка такого файла осуществляется гораздо быстрее. Вот.

Пока ты не скажешь про Sizeof(x) тебе никто не сможет ответить, но есть подозрение что это много.

out of memory while expanding memory stream что делатьout of memory while expanding memory stream что делать
Сергей ( 2003-03-14 17:02 ) [11]

Sizeof(x) Вычисляет размер буфера для одного элемента массива, ну правильнее будет Sizeof(x[i])

out of memory while expanding memory stream что делатьout of memory while expanding memory stream что делать
kDenis ( 2003-03-14 17:03 ) [12]


> Сергей

Ну напиши ты просто:
TMemoryStream.writebuffer(x,Sizeof(x));
Без всяких цыклов.


> Anatoly Podgoretsky ©
> theodor_iv ©

Хватит издиватся над человеком!

out of memory while expanding memory stream что делатьout of memory while expanding memory stream что делать
Digitman ( 2003-03-14 17:05 ) [13]

out of memory while expanding memory stream что делатьout of memory while expanding memory stream что делать
Anatoly Podgoretsky ( 2003-03-14 17:07 ) [14]

Сергей (14.03.03 17:02)
Да не что он вычитает, а сколько возвращает в твоем случае

Без всяких цыклов.
Не получиться, потому, что размер динамического массива функцией sizeOF не вычисляется.

out of memory while expanding memory stream что делатьout of memory while expanding memory stream что делать
Anatoly Podgoretsky ( 2003-03-14 17:10 ) [16]

Сергей (14.03.03 17:02)
Да и раз ты уже изменил показания, то давай новый правильный код со всеми данными

kDenis © (14.03.03 17:03)
Я очень сожалею по поводу твоего негодования, но ничем не могу помочь, только автор вопроса может ответить о размере X удобным ему способом. Мы же в отличии от тебя не телепаты

out of memory while expanding memory stream что делатьout of memory while expanding memory stream что делать
theodor_iv ( 2003-03-14 17:10 ) [17]

out of memory while expanding memory stream что делатьout of memory while expanding memory stream что делать
Anatoly Podgoretsky ( 2003-03-14 17:11 ) [18]

theodor_iv © (14.03.03 17:10)
Если твое предположение насчет 50 иб верное, то встает вопрос, а где взять 10 терабайт

out of memory while expanding memory stream что делатьout of memory while expanding memory stream что делать
theodor_iv ( 2003-03-14 17:14 ) [19]


> Anatoly Podgoretsky ©

Я так понял, что под фразой

> Данных где-то около 40-50Мб.

понимался суммарный объем, а не объем одного Х.

out of memory while expanding memory stream что делатьout of memory while expanding memory stream что делать
Сергей ( 2003-03-14 17:14 ) [20]

Anatoly Podgoretsky © (14.03.03 17:07):

out of memory while expanding memory stream что делатьout of memory while expanding memory stream что делать
Сергей ( 2003-03-14 17:15 ) [21]

theodor_iv © (14.03.03 17:14): Все правильно понимаете

out of memory while expanding memory stream что делатьout of memory while expanding memory stream что делать
Anatoly Podgoretsky ( 2003-03-14 17:18 ) [22]

Давай правильный код и размеры, иначе не ответить, но если у тебя 10иб, то посчитай сам 200 000 * 10 000 000, то это 10 терабайт, а виндоус поддерживает жля пользователя только 2 гигабайта виртуальной памяти в одном процессе.

out of memory while expanding memory stream что делатьout of memory while expanding memory stream что делать
theodor_iv ( 2003-03-14 17:23 ) [23]


> Сергей (14.03.03 17:15)
> theodor_iv © (14.03.03 17:14): Все правильно понимаете

Для того, чтобы создать такой поток, операционке нужно выделить более 50 мегабайт оперативной памяти одним непрерывным блоком, что является для нее нетривиальной задачей. 🙂

out of memory while expanding memory stream что делатьout of memory while expanding memory stream что делать
Сергей ( 2003-03-14 17:25 ) [24]

Anatoly Podgoretsky © (14.03.03 17:18): Какие 10иб, кто это сказал? привожу код.

//Сохранение полигона в файл
procedure SavePolygon(Stream : TMemoryStream;Pol: TPolygon);
var SizePol: integer;
begin
SizePol:= Length(POl);
Stream.WriteBuffer(SizePol,SizeOf(Integer));//Пишем длину
Stream.WriteBuffer(PChar(POl)^,SizePol*SizeOf(TPoints));
end;
end;

//Сохранение свойств полигона
procedure TProjection.SavePolygonProp1(Stream : TMemoryStream;Prop: TPropPolygon);
var SizePol: LongInt;
begin
SizePol:= SizeOf(Prop);
Stream.WriteBuffer(Prop,SizePol);
end;

//Сохранение слоя в файл
procedure TProjection.SaveLayer1(Stream:TMemoryStream;L: TLayer);
var amPolygon: dword; //Число полигонов в слое
i: integer;
begin
amPolygon:=length(L.DataP);
Stream.WriteBuffer(amPolygon,SizeOf(amPolyGon));
for i:=1 to amPolygon do
begin
SavePolygon1(stream,L.DataP[i-1]);
SavePolygonProp1(stream,l.PolProp[i-1]);
end;
Stream.WriteBuffer(L.names,SizeOf(L.names));
Stream.WriteBuffer(L.vis,SizeOf(L.Vis));
end;
strm.SaveToFile(SaveDialog1.FileName);

out of memory while expanding memory stream что делатьout of memory while expanding memory stream что делать
Anatoly Podgoretsky ( 2003-03-14 17:37 ) [25]

Абсолютно другой код, чем в 16:25
Но точно также неясно насчет размеров записываемых элементов
Говорите точно сколько вам вешать, в байтах, память все таки.
Если не знаешь точно, то поступи так,
заведи переменную X
перед каждым Stream.WriteBuffer делай

X := X + размер;
Label1.Caption := IntToStr(X);
//Label2.Caption := IntToStr(I);
Application.ProcessMessages;

И узнаешь правду, до этого убедись, что на диске со своп файлом есть по крайней мере свободных 2 гб

out of memory while expanding memory stream что делатьout of memory while expanding memory stream что делать
Digitman ( 2003-03-14 17:45 ) [26]

out of memory while expanding memory stream что делатьout of memory while expanding memory stream что делать
theodor_iv ( 2003-03-14 17:49 ) [27]


> Digitman © (14.03.03 17:45)
нахрена (!!) писать данные в память

Видимо, какую-то тайную цель преследует. Я тут уже об этом четыре раза сказал, но ответа не получил.

out of memory while expanding memory stream что делатьout of memory while expanding memory stream что делать
Anatoly Podgoretsky ( 2003-03-14 17:55 ) [28]

А я не получил ответа о размере данных, в тоже время жалоба на нехватку оной. Но может если проведет отладку по указанному сценарию то все таки сообщит.

out of memory while expanding memory stream что делатьout of memory while expanding memory stream что делать
Serginio ( 2003-03-14 20:35 ) [29]

У меня при размере > 80 000*4 байт поэтому для записи больших данных создал свой стрим основанный на массиве больших блоков памяти. А вообще то проблема с реалоками во всех объектах которые используют непрерывную память (TList,TStringList..) если хочешь вышлю.

Источник

Многие пользователи ПК во время работы с какой-либо программой могут столкнуться с «вылетом» указанной программы, и появившимся сообщением «Out of memory». Возникшая проблема может иметь множество причин, начиная от банального недостатка памяти на пользовательском ПК, и заканчивая некорректной работой с памятью какой-либо программы.

out of memory while expanding memory stream что делать

Причины появления дисфункции

Сообщение «Out of memory» (в переводе дословно «вне памяти», или «недостаточно памяти») обычно возникает при недостатке памяти на пользовательском компьютере. В частности же, в появлении данной ошибки «виновен» следующий набор факторов:

Когда вашему компьютеру не хватает физической R.A.M. памяти, он заимствует часть места на жёстком диске, и создаёт так называемую «виртуальную память». Система временно хранит в такой виртуальной памяти ту часть данных, которая не помещается в памяти обычной. Такие данные обычно хранятся в файле «pagefile.sys», размер которого может увеличиваться или уменьшаться в зависимости от специфики работы вашей ОС. Если на диске будет недостаточно места, файл «pagefile.sys» не сможет расти, и пользователь получит рассматриваемую ошибку.

Как исправить ошибку «Out of memory»

Для решения указанной проблемы рекомендую сделать следующее:

Альтернативным вариантом решения проблемы является установка соответствующего фикса от Майкрософт. Или использование расширений или дополнений для браузера уровня «The Great Suspender» для «Google Chrome», хорошо работающего с ненужными вкладками браузера.

bcdedit/set IncreaseUserVa 3072

И нажмите на ввод, и перезагрузите ваш ПК. Функционал данной команды позволяет выделить пользовательским приложениям 3 гигабайта оперативной памяти для работы. В некоторых системах этого может быть слишком много, потому если после ввода данной команды система начала чаще сбоить, то введите в командной строке от имени администратора:

bcdedit /set IncreaseUserVa 2560 — что позволит задействовать 2,5 гигабайта вместо ранее забронированных 3.

Если ситуацию этим исправить не удалось, верните настройки на состояние по умолчанию:

bcdedit /deletevalue IncreaseUserVa

out of memory while expanding memory stream что делать

Установите нужный размер файла подкачки

Заключение

Ошибка «Out of memory» может иметь множество причин, связанных как с физическим недостатком памяти на ПК, так и другими детерминантами, изложенными мной выше. Для решения проблемы советую закрыть ненужные программы (вкладки браузера) на вашем компьютере (тем самым разгрузив его память), а самым эффективным инструментом является установка дополнительной планки памяти на ПК, что в большинстве случаев поможет избавиться от ошибки на вашем компьютере.

Источник

Out of memory while expanding memory stream что делать

изза-чего может возникнуть такая ошибка, памяти хватает

out of memory while expanding memory stream что делатьout of memory while expanding memory stream что делать
Palladin © ( 2011-02-11 18:27 ) [1]

если тебе говорят что не хватает, то ее не может хватать, хотя с другой стороны если тебе памяти не хватает, то программе может хватать, ведь скорее всего памяти хватало до этого, а теперь не хватает, и программе не хватает памяти, что бы вспомнить что раньше ей памяти хватало, вот по этому памяти и не хватает

out of memory while expanding memory stream что делатьout of memory while expanding memory stream что делать
Anatoly Podgoretsky © ( 2011-02-11 19:11 ) [2]

> Palladin (11.02.2011 18:27:01) [1]

Не хватает, вот он и забыл про это.

out of memory while expanding memory stream что делатьout of memory while expanding memory stream что делать
Token ( 2011-02-11 20:08 ) [3]

А почему она возникает при выделении порядка 1Gb?

Не знаю, как экспандится поток, но может быть он сперва выделяет новую память, потом копирует в нее старые данные а затем удаляет старую память? Т.е. когда резервируется новая память, старая может еще не освобождаться. Такой подход, например, может приводить к нехватке памяти при SetLength очень больших массивов, когда памяти еще, казалось бы, хватает.

Именно сразу после создания, устанавливается размер порядка 1Gb. И не хотит. Хотя теоретически принципиальных ограничений я не вижу.

out of memory while expanding memory stream что делатьout of memory while expanding memory stream что делать
Token ( 2011-02-11 21:18 ) [6]

out of memory while expanding memory stream что делатьout of memory while expanding memory stream что делать
Palladin © ( 2011-02-11 21:19 ) [7]

все разговоры разговариваете, этим долго можно заниматься.
может на конкретику перейдете, станцуете или код покажете, на худой конец.
я вот взял переменную завел глобальненькую
var
a: array of Integer;

кнопочку кинул на формочку написав в onclick
SetLength(a, 1073741824 div 4);

и как то всем всего хватило

так что можете разговоры о теории разговаривать и дальше, но лично я вашему вранью о чистейшей правде и клятвах на святых бананах не поверю

out of memory while expanding memory stream что делатьout of memory while expanding memory stream что делать
Token ( 2011-02-11 21:23 ) [8]

str:=TMemoryStream.Create;
str.SetSize(1500000000);
—-
а вот str.SetSize(1600000000); уже не катит

out of memory while expanding memory stream что делатьout of memory while expanding memory stream что делать
Игорь Шевченко © ( 2011-02-11 21:27 ) [9]

out of memory while expanding memory stream что делатьout of memory while expanding memory stream что делать
Игорь Шевченко © ( 2011-02-11 21:31 ) [11]

проще узнать, сколько доступно и исходить из этого, а не желать странного и плакаться по форумам.

out of memory while expanding memory stream что делатьout of memory while expanding memory stream что делать
Token ( 2011-02-11 21:35 ) [12]

Я не плачусь, я спросил.

out of memory while expanding memory stream что делатьout of memory while expanding memory stream что делать
Игорь Шевченко © ( 2011-02-11 21:39 ) [13]

я автора имел в виду, если что

out of memory while expanding memory stream что делатьout of memory while expanding memory stream что делать
Token ( 2011-02-11 21:54 ) [14]

Ну на самом деле, я воспользовался случаем для прояснения ) До этого думал что под систему есть 3-ий гиг, и все 2 остальные мои. И как-то не доходило, что все «изолировано» и библиотеки надо отображать в адреса приложения.

> И. Павел (11.02.2011 21:02:04) [4]

А ты знаешь другой варинт, когда сначала удаляется старая память 🙂

out of memory while expanding memory stream что делатьout of memory while expanding memory stream что делать
Anatoly Podgoretsky © ( 2011-02-12 10:13 ) [16]

> Palladin (11.02.2011 21:19:07) [7]

out of memory while expanding memory stream что делатьout of memory while expanding memory stream что делать
Anatoly Podgoretsky © ( 2011-02-12 10:14 ) [17]

> Token (11.02.2011 21:23:08) [8]

out of memory while expanding memory stream что делатьout of memory while expanding memory stream что делать
Anatoly Podgoretsky © ( 2011-02-12 10:15 ) [18]

> Token (11.02.2011 21:35:12) [12]

Ты не спросил, ты пургу несешь

out of memory while expanding memory stream что делатьout of memory while expanding memory stream что делать
Anatoly Podgoretsky © ( 2011-02-12 10:16 ) [19]


> я автора имел в виду, если что

А я обеих и в первую очередь второго.


> Anatoly Podgoretsky © (12.02.11 10:16) [19]

> > я автора имел в виду, если что

> А я обеих и в первую очередь второго.

И целовался на кухне с обоими.
🙂

out of memory while expanding memory stream что делатьout of memory while expanding memory stream что делать
DiamondShark © ( 2011-02-14 12:49 ) [21]

Напишите себе стрим на базе файла с атрибутами FILE_ATTRIBUTE_TEMPORARY
or FILE_FLAG_DELETE_ON_CLOSE

А про MemoryStream забудьте как о страшном сне.

Источник

Как исправить ошибку «Out of Memory»

out of memory while expanding memory stream что делать

Ошибка «Out of Memory» обычно появляется, когда на компьютере запущено много программ, использующих ресурсы, доступные для компьютера. Компьютерная память или ОЗУ (оперативное запоминающее устройство) используется компьютером для быстрого хранения данных для их обработки.

Когда появляется эта ошибка?

Как я уже отмечал выше, запуск сразу нескольких программ может перегрузить объем доступной свободной памяти, что приведет к ошибке «Out of Memory». Это может случиться как с новыми программами, так и с уже запущенными на компьютере программами. Иногда это может произойти, независимо от объема доступной свободной памяти.

Причина ошибки «Out of Memory»

Причина этих ошибок немного сложнее. Подсистема WIN32 Windows имеет ограниченный объем доступной памяти. Если память в куче рабочих столов подсистемы WIN32 используется. Windows может выдавать сообщение об ошибке «Out of Memory».

Компьютеры, работающие не так, как операционные системы Microsoft Windows, не слишком уязвимы. Эта проблема в основном существует для пользователей Windows NT 3.5 и Windows NT 3.1

Как исправить ошибку «Out of Memory»

Чтобы исправить эту проблему, вам необходимо отредактировать свой реестр Windows. Редактирование реестра является рискованным занятием. Действовать нужно с осторожностью, и только строго по инструкции:

Чтобы избежать проблем, тщательно следуйте этим инструкциям.

Отсюда, следуйте этим шагам в зависимости от вашей операционной системы

Для Windows NT:

Для Windows 2000, Windows XP и Windows Server 2003:

Для 32-разрядных операционных систем

Для 64-разрядных операционных систем

Есть свой вариант быстрого решения ошибки «Out of Memory»? Пишите его в форму комментариев к этой статье, и если ваш вариант окажется полезным, мы обязательно дополним руководство.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *