Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.11.2015, 14:29   #1
Emelrouse
Пользователь
 
Регистрация: 16.09.2015
Сообщений: 10
По умолчанию Обработка файлов 1-5 гигабайт

Добрый день!
Столкнулся с большой проблемкой. Есть парсер, но обрабатывает куски данных не больше 10-12 мегабайт. При 50 начинает подвисать, с потугами но и их обрабатывает. После 100 - без шансов. А обрабатывать нада 1 гиг... Подскажите пожалуйста как реализовать загрузку таких объемных данных в софт? Читал что то про mapping но не понял принцип. Буду рад помощи
Emelrouse вне форума Ответить с цитированием
Старый 25.11.2015, 14:35   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а вы, надеюсь, не в мемо грузите?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 25.11.2015, 14:58   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Читай построчно-поблочно без всяких Memo или StringList и парси. Тоже не за милисекунды, но виснуть не будет. Mapping не для этого нужен
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 25.11.2015, 15:15   #4
Emelrouse
Пользователь
 
Регистрация: 16.09.2015
Сообщений: 10
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
а вы, надеюсь, не в мемо грузите?
Нет, гружу в StringList. Это критично?
Просто раньше его хватало.
Emelrouse вне форума Ответить с цитированием
Старый 25.11.2015, 15:32   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Это критично?
Критично когда гигабайты. Он в память все пишет
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 25.11.2015, 17:19   #6
Emelrouse
Пользователь
 
Регистрация: 16.09.2015
Сообщений: 10
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Читай построчно-поблочно без всяких Memo или StringList и парси.
Это как? В этом и есть мой вопрос)
Emelrouse вне форума Ответить с цитированием
Старый 25.11.2015, 17:30   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

есть старые добрые паскалевские ReadLn,Reset,Assign(правда AssignFile теперь)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 25.11.2015, 20:23   #8
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию

Если работа с файлом, то TFileStream Вам в помощь.
FaTaL вне форума Ответить с цитированием
Старый 26.11.2015, 09:07   #9
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Если работа с файлом, то TFileStream Вам в помощь.
СогласенЪ. Главное - не читать файл побайтно
а то ТС щас наговнокодит и будет материть TFileStream и того, кто посоветовал.
Я б юзал буфер, скажем, в 128кбайт. А ещё лучше - дополнительный TMemoryStrem как буфер, откуда уже б и TStriingList.LoadFromStream();
А ещё есть TStringStream...
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 26.11.2015, 10:18   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

min@y™, имхо, это не имеет особого значения.
var b : byte;
FileStream1.ReadBuffer(b)

и
var
buffer:array[0..128*1024-1] of byte;
FileStream1.ReadBuffer(buffer)

дадут НЕ ПРИНЦИПИАЛЬНУЮ разницу в быстродействии (хотя, конечно, я бы тоже заморочился с чтением в буфер).

Проверите?
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
обработка файлов Pepsik Помощь студентам 1 10.07.2011 21:35
С++. Обработка файлов teach Помощь студентам 5 02.04.2011 16:41
Обработка файлов FauLL Общие вопросы C/C++ 1 23.06.2010 21:34
Обработка файлов. Morzik8 Помощь студентам 2 17.05.2010 20:05
Обработка файлов Си++ modulrev Помощь студентам 22 19.02.2009 18:53