![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как обойти ограничение в 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? и что значит "сыпется"?