|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Ошибка Out of memory при загрузке файла в TStringList
Добрый день. Есть следующая ситуация
РС(i7 8Gb Win7 x64 + RAD XE3), приложения можно компилировать только в 32 разр. режиме - список грузит файл с диска Код:
Procedure RestorData; begin try CS.Enter; try gStore.LoadFromFile(ExtractFilePath(Application.ExeName)+'Store.txt'); finally CS.Leave; end; except on E:Exception do begin ShowMessage('RestorDataParams = '+'('+E.Message+')'); end; end; end; - при определенных условиях(не всегда) выскакивает ошибка: First chance exception at $7561C54F. Exception class EOutOfMemory with message 'Out of memory'. Process loader.exe (3736) в основном ошибка выскакивает при попытке загрузить в список файл размером в 300 мб с числом строк около 3 млн. при запуске программы, или выгрузить список обратно при выходе из программы. - список со строками совершенно необходим(стек со списком УРЛ для загрузки), хотя... Вопросы : 1. вообще эта проблема решаема для TStringList 2. если список не тянет, что еще можно использовать для загрузки-выгрузки милионов строк(до 500 символов в строке) из какого либо хранилища на ЖД |
#2
|
||||
|
||||
TStringList не справится в принципе, даже на x64. Переполнение Integer будет. Тут либо файл, либо БД проще будет.
Пишу программы за еду. __________________ |
#3
|
|||
|
|||
вообще там несколько списков точнее 5
до 300 мб все списки грузятся в ОЗУ (300+2+8+1)мб объем памяти растет до 1600 мб, после загрузки падает до 770 мб но на последнем списке(300 мб) начинается загрузка и тут сбой |
#4
|
|||
|
|||
А тебе точно надо все в память загрузить?
Помню, была задача анализа лог файла. По первомк, конечно, тоже все загрузил в память и потом уже анализировал. Через некоторое время от клиента пришел баг-репорт, что валится анализатор, т.к. у него лог-файлы были под 2 гига. Соответсвенно, пришлось переделать алгоритм - читать по строчкам и сразу вычислять суммированный результат набегающим итогом. Так и требования к памяти снизились, и работать быстрее стало. Так что помотри на свою задачу, может тебе не надо грузиит все целиком или можно обраьотать по частям... |