Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Работа с объёмным файлом.


Автор: ParatroopeR 30.1.2005, 18:32
Итак, у меня есть задача. Обработать исходный файл *.txt весом 60 мегов. Алгоритм обработки довольно таки простой, но суть не в этом. Накодировал я всё нормально и алгоритм пашет как часы(но в этом и проблема!!!), то что на обработку файла уходят часы, а мне нужно нехило всё это дело ускорить. Смысл в чём, так как я не могу понять как запихнуть файл целиком в оперативу, чтобы повысить быстродействие. На данный момент обработка ведётся "порциями", в файле порядка 800 тысяч строк. Я вытаскиваю оттуда по 4000 строк, заношу данные в интовский массив 4000 на 2000. В итоге за 5 минут удаётся обработать порядка 20000 строк, сами понимаете чем это потом выливается. Если создавать массив больше компилятор ест. начинает орать. Может кто уже сталкивался с такой проблемой.

Вопрос: "Как запихнуть всё содержимое файла в ОП?"

Автор: En_t_end 30.1.2005, 18:54
Распаралеливай процесс

Автор: ParatroopeR 30.1.2005, 19:21
[C++Error] Unexpected reply.
Этот вариант мне не подходит. Мне необходимо неоднократно обращаться к содержимому файла, паралель не паралель, хард от этого быстрее не станет. Может кто знает посерьёзней способ? Как запихнуть весь файл в ОП, это самый (Как мне кажется) правдоподобный способ увеличить производительность. Как сохранить в ОП около 1.5 миллиардов чисел?

Автор: _hunter 31.1.2005, 15:31
CreateFileMapping() и MapViewOfFile() должны помочь
+ в чем проблема просто прочитать 60 метров ( это понты, на самом деле )

Автор: En_t_end 31.1.2005, 15:35
_hunter
Он наверное сказал про 60 метров с таким смыслом, что может быть и больше smile
CreateFileMapping() и MapViewOfFile() - это подойдет, точно.

Автор: _hunter 31.1.2005, 15:39
ну так и сказал бы как-то так: "длинной не меньше 60-ти метров ( предполагается 6 км )"

Автор: ParatroopeR 31.1.2005, 21:22
Да мне просто обращаться к нему надо около 1.5 миллиарда раз. Сами понимаете во, что превращается этот процесс.
Пойду попробую. Пока заранее спасибо. А то, что может быть и больше, чтож вполне может быть.

Автор: _hunter 31.1.2005, 23:41
на сколько больше?
до двух ( или 4-х ) гигов спокойно можно читать -- пусть у винды голова болит что с этими данными делать.
+ нужно пересмотреть процесс -- может его оптимизировать можно

Автор: Hroft 2.2.2005, 14:48
Его скорее всего не только можно, но и нужно оптимизировать. Я так думаю, дело вообще не в винте, а в том, что он делает с этими данными.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)