Форум программистов
 
О проблемах, например, с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

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

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

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 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,002
По умолчанию

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

Читай построчно-поблочно без всяких 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
Сообщений: 19,061
По умолчанию

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

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

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

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

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

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

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

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

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

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


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


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS