0 / 0 / 0
Регистрация: 16.04.2013
Сообщений: 34
|
||||||
1 | ||||||
Загрузка и обработка большого файла в StringList14.05.2015, 00:26. Показов 7933. Ответов 43
Метки нет (Все метки)
out of memory Можно ли побороть ошибку и загружать большие файлы с помощью стринглиста, и пользоваться ими во время работы программы? Использую стринглист, потому он очень быстро обрабатывает строки.
0
|
14.05.2015, 00:26 | |
Ответы с готовыми решениями:
43
Загрузка из файла в stringgrid с использованием stringlist Загрузка большого файла. Ошибка Загрузка большого файла с сервера Обработка большого файла |
0 / 0 / 0
Регистрация: 16.04.2013
Сообщений: 34
|
|
14.05.2015, 01:39 [ТС] | 3 |
Ага, именно так раньше я и загружал файлы в стринглист.
P.S. Out Of Memory Код в шапке - загружает больше, чем процедура loadfromfile.
0
|
пофигист широкого профиля
4733 / 3167 / 859
Регистрация: 15.07.2013
Сообщений: 18,252
|
|
14.05.2015, 02:12 | 4 |
В топике было сказано "Загрузка и обработка".
А в примере кода показана только загрузка. Где код обработки?
0
|
0 / 0 / 0
Регистрация: 16.04.2013
Сообщений: 34
|
|
14.05.2015, 02:15 [ТС] | 5 |
Допустим, копирование из стринглиста строки по индексу и обработка в потоке построчно (копирование, удаление и прочее (парсинг)).
0
|
пофигист широкого профиля
4733 / 3167 / 859
Регистрация: 15.07.2013
Сообщений: 18,252
|
|
14.05.2015, 02:23 | 6 |
Любой неграмотный код может вызвать EOutOfMemory. Так почему проблема ищется именно в загрузке файла в StringList?
0
|
0 / 0 / 0
Регистрация: 16.04.2013
Сообщений: 34
|
|
14.05.2015, 02:26 [ТС] | 7 |
Потому что он удобен для работы со строками.
Есть варианты получше?
0
|
139 / 137 / 66
Регистрация: 15.05.2012
Сообщений: 515
|
|
14.05.2015, 02:31 | 8 |
В потоке (TThread) подгружать в TStringList кусками файл через TFileStream и обрабатывать его, результат выводить в TStringList или компонент весь или блочно в зависимости от объёма данных.
По поводу обработки то - алгоритм Бойера-Мура
1
|
0 / 0 / 0
Регистрация: 16.04.2013
Сообщений: 34
|
|
14.05.2015, 02:33 [ТС] | 9 |
И чего, не лопнет стринглист? Больше 2-ух гигов загрузит? У меня больше
*пардон, 700мб
0
|
пофигист широкого профиля
4733 / 3167 / 859
Регистрация: 15.07.2013
Сообщений: 18,252
|
|
14.05.2015, 02:40 | 10 |
Я не спрашивал почему работаешь с ТStringList. Я спрашивал почему ты считаешь что проблема именно в загрузке большого файла, а не в неграмотной обработке его загруженного содержимого?
0
|
0 / 0 / 0
Регистрация: 16.04.2013
Сообщений: 34
|
||||||
14.05.2015, 02:43 [ТС] | 11 | |||||
0
|
пофигист широкого профиля
4733 / 3167 / 859
Регистрация: 15.07.2013
Сообщений: 18,252
|
|
14.05.2015, 02:58 | 12 |
0
|
0 / 0 / 0
Регистрация: 16.04.2013
Сообщений: 34
|
|
14.05.2015, 03:22 [ТС] | 13 |
Главный мой вопрос темы состоит в том: "Можно ли загрузить в стринглист файл больше 700 мб или нет?"
Придётся через поток кусками загружать в стринглист строки, а вопрос: "Надо ли? Реально ли 2 гига стринглист потянет, если, допустим у тебя 16 гб ОЗУ.".
0
|
0 / 0 / 0
Регистрация: 16.04.2013
Сообщений: 34
|
||||||
14.05.2015, 03:36 [ТС] | 14 | |||||
А...типа...для того, чтобы был дан ответ обязательно должен прилагаться исходник?
А ну...хорошо, вот:
P.S. Руки не отсохли?
0
|
14.05.2015, 07:34 | 15 |
если память мне не изменяет, загрузка через StringList N мегабайт приведет к расходу памяти 2N
кто может заранее сказать, хватит тебе ее или нет? проверить - 10 минут вместе с генерацией мега - файла. с моей т.з. если тебе нужно почистить от снега двор на даче - бери лопату, если взлетную полосу - ищи другое решение у меня есть приложение, в нем в реальном времени ездит по карте весь электротранспорт 1.5 миллионного города с расписаниями, маршрутной сеткой и массой других штук и оно все укладывается в 400 мб в памяти Так что строку в 700 мб ты если только придумал сам. Как обычно, вопрос задан не о том. http://www.gunsmoker.ru/2008/10/x-y-z.html Поэтому и ответ - не нужно помогать делать так, как не нужно делать. Если бы знали исходную задачу, помогли бы...
1
|
0 / 0 / 0
Регистрация: 16.04.2013
Сообщений: 34
|
|
14.05.2015, 07:57 [ТС] | 16 |
Пробовал - вылетело out memory на 1800 mb, странно, но у меня ОЗУ больше, чем 1800 mb.
Думаю, можно в процессе работы записывать в Стринглист по 200 мб за раз, сохранять конечную позицую FileStream'a, обрабатывать их, очищать, затем снова продолжить с конечной позиции, и так до самого конца, у меня выйдет что-то, если попробую так?
0
|
0 / 0 / 0
Регистрация: 16.04.2013
Сообщений: 34
|
|
14.05.2015, 14:26 [ТС] | 19 |
0
|
14.05.2015, 14:51 | 20 |
как может 32 бит программа откусить более 3гб?
надо помнить, что в данном случае нужно не суммарная свободная память, а непрерывный кусок памяти такого размера
2
|
14.05.2015, 14:51 | |
14.05.2015, 14:51 | |
Помогаю со студенческими работами здесь
20
Обработка большого файла Обработка большого файла в потоках Обработка большого текстового файла Обработка большого текстового файла обработка большого файла excel Загрузка файла большого размера с одного устройства Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |