Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

как обойти ограничение в 2 Гб. для стримов? [D7]


Scott Storch ©   (2011-02-15 11:51:00) 

приложение загружает файлы статистики по интернет-магазинам. если загружается слишком большой файл (> 2 Гб.) - сыпется стрим. что посоветуете?


Вариант   (2011-02-16 09:09:00) [1]


> clickmaker ©   (15.02.11 15:11) [13]

Понравилось:-)


  (2011-02-15 22:38:00) [2]

Удалено модератором


KilkennyCat   (2011-02-15 19:54:00) [3]

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


Anatoly Podgoretsky   (2011-02-15 19:24:00) [4]


> TMemoryStream

И тебя не смущает слово Memory?
В 32 битной программи Memory не может быть более 2 гб, если не считать некоторых экзотических случаев.


Jeer   (2011-02-15 17:58:00) [5]


> clickmaker ©   (15.02.11 15:11) [13]


Заворот мозга у автора.


KSergey   (2011-02-15 17:22:00) [6]

> clickmaker ©   (15.02.11 15:11) [13]

Ахинея.


clickmaker   (2011-02-15 15:11:00) [7]

http://www.wasm.ru/article.php?article=onebyte


Dimka Maslov   (2011-02-15 15:00:00) [8]


> вас бы обратно в дос, мигом экономить научились бы... беспредельщики
> )


Кто видел ссылку на рассказ про один байт?


Германн   (2011-02-15 13:48:00) [9]


> Во времена дос таких файлов не было

Во времена дос таких дисков даже не было, не то что файлов! )))


oldman   (2011-02-15 13:30:00) [10]


> brother ©   (15.02.11 12:26) [9]


Во времена дос таких файлов не было :)))


brother   (2011-02-15 12:26:00) [11]

во времена дос и железо скромнее было;) а сейчас - уже можно ;)


Palladin   (2011-02-15 12:22:00) [12]

вас бы обратно в дос, мигом экономить научились бы... беспредельщики )


Стрим   (2011-02-15 12:13:00) [13]

>out of memory

Это переводится не как "стрим рассыпался", а как "нету памяти".
Если тебя интересует именно обзод ограничения в 2 ГБайта, то надо писать 64-разрядный софт под 64-разрядные ОС, для чего воспользоваться 64-разрядным компилятором. Delphi такого не умеет. Хотя, говорят, что, возможно, в некоем обозримом будущем, таки научится. Но, если честно, то лучше не ждать выхода 64-разрядного компилятора Delphi, а переписать программу, реализовав последовательный анализ по записям. Потому что программа анализа статистики, пожирающая ОЗУ в объемах, равных размеру файла статистики - не программа, а монстр какой-то. Тебе так никакой ОС не хватит. Ни 32-разрядной, ни 64-разрядной, ни 128...

Представь себе человека, который вначале бессознательно зазубривает наизусть весь роман "Войну и Мир", а потом закрывает глаза, и, вспоминая зазубренное, начинает  проникаться атмосферой произведения и гением автора. Тупо? Твоя программа именно так и делает.


clickmaker   (2011-02-15 12:05:00) [14]

> [3] Scott Storch   (15.02.11 12:01)

рекомендую глянуть в сторону memory-mapped files


oldman   (2011-02-15 12:04:00) [15]

Что же это за статистика такая, больше 2-х гиг?


Стрим   (2011-02-15 12:02:00) [16]

2 Гб - ограничение на доступное адресное пространство процесса для 32-битных ОС MS Windows XP, Vista...

То есть, если ты TMemoryStream использовал, то, значит, неправильно использовал, потому что он больше 2 ГБайт не сможет хранить.

TFileStream тут не при чем, он внутри как 32-битный, так и 64-битный. То есть, 2 ГБайта для него - не предел. То есть, если ты использовал где-то в своей программе integer для работы с потоком, то это и твоя ошибка.

Так что грузи не весь файл статистики, а разбирай его по записям, последовательно. При правильной реализации, проблем с памятью не будет. Никогда.

P.S. Сообщение об ошибке: "Ахтунг! Стрим рассыпался!"...


Scott Storch   (2011-02-15 12:01:00) [17]


> какой стрим?


TMemoryStream


> что значит "сыпется"?


когда TMemoryStream.Size > 2 Гб. - сообщение out of memory


oldman   (2011-02-15 11:53:00) [18]

Загружать кусками


clickmaker   (2011-02-15 11:52:00) [19]

какой стрим? TFileStream? и что значит "сыпется"?


Наверх

Титульная страница Поиск, карта сайта Написать письмо