![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Добрый день. Есть следующая ситуация
РС(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 гига. Соответсвенно, пришлось переделать алгоритм - читать по строчкам и сразу вычислять суммированный результат набегающим итогом. Так и требования к памяти снизились, и работать быстрее стало. Так что помотри на свою задачу, может тебе не надо грузиит все целиком или можно обраьотать по частям... |