Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.94
Ortistx
1 / 1 / 0
Регистрация: 19.02.2011
Сообщений: 39
#1

Чтение полного файла в память или по кускам? - C++

08.03.2011, 15:15. Просмотров 2384. Ответов 6
Метки нет (Все метки)

Здравствуйте.
Возник такой вопрос. Как рациональнее делать в плане выигрыша процессорного времени и занятия минимального количества места?
Есть файл. С его данными надо проделать некие операции и создать новый файл того же типа, но с измененными данными. Так вот, что лучше, прочитать весь файл в буфер и там его обрабатывать или обрабатывать последовательно, читая побайтно и сразу записывая данные в новый файл?

Спасибо.
http://www.cyberforum.ru/cpp-beginners/thread543799.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.03.2011, 15:15
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Чтение полного файла в память или по кускам? (C++):

Сравнение переменных или чтение с файла?
После тестировки, выяснилось, что проблема возникает в строке указаной...

Чтение из текстового файла одного или три значения
Текстовой файл состоит из строк состоящих из 3ех или одного числовых значения....

Чтение из файла. Почему выравнивание по ширине ? Или как это назвать
class Formulation //постановка задачи { public: void Instruction() {...

Извлечь из полного имени файла директорию
Здравствуйте, из C:\Users\user\Documents\Virtual Machines\Windows 10...

Чтение из файла строки по началу строки или ее части
Всем доброго времени суток! Большая просьба помочь! поступило задание, сделать...

6
fasked
Эксперт С++
4976 / 2556 / 241
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
08.03.2011, 15:25 #2
Цитата Сообщение от Ortistx Посмотреть сообщение
прочитать весь файл в буфер и там его обрабатывать
А если файл будет размером несколько гигабайт?
Цитата Сообщение от Ortistx Посмотреть сообщение
обрабатывать последовательно, читая побайтно и сразу записывая данные в новый файл?
Побайтно обрабатывать тоже не лучший вариант.
Лучше всего использовать блочное чтение примерно по 512 байт или используя константу BUFSIZ, которая определена в stdio.h. А вообще как мне кажется максимальная скорость будет достигнута при размере блока равному размеру сектора диска или размеру одного кластера.
2
Ortistx
1 / 1 / 0
Регистрация: 19.02.2011
Сообщений: 39
08.03.2011, 15:31  [ТС] #3
fasked, тип файла будет jpeg, поэтому максимум - это десятки мегабайт для моих целей.

Т.е. в любом случае, блочное чтение быстрее будет, чем обработка в памяти?

А что за константа BUFSIZ?
0
alex_x_x
бжни
2454 / 1660 / 134
Регистрация: 14.05.2009
Сообщений: 7,162
08.03.2011, 15:37 #4
мне кажется проецирование на память средствами ос самый быстрый и удобный способ работы с большими файлами
1
fasked
Эксперт С++
4976 / 2556 / 241
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
08.03.2011, 15:43 #5
Цитата Сообщение от Ortistx Посмотреть сообщение
А что за константа BUFSIZ?
Как мне кажется это константа определяет стандартный размер буфера для потока. Буфер можно изменить функцией setvbuf. Я могу ошибаться конечно.
Цитата Сообщение от alex_x_x Посмотреть сообщение
проецирование на память средствами ос самый быстрый и удобный способ работы с большими файлами
+1, я подразумевал только средства стандартных библиотек языка.
0
Ortistx
1 / 1 / 0
Регистрация: 19.02.2011
Сообщений: 39
08.03.2011, 16:00  [ТС] #6
мне кажется проецирование на память средствами ос самый быстрый и удобный способ работы с большими файлами
а можно расшифровать эту фразу? Т.е. имеется ввиду все-таки самый быстрый способ все в память загружать?
0
odip
Эксперт С++
7161 / 3219 / 76
Регистрация: 17.06.2009
Сообщений: 14,161
08.03.2011, 16:28 #7
Имеются в виду файлы, отображаемые в память

Managing Memory-Mapped Files
http://msdn.microsoft.com/en-us/library/ms810613.aspx

Добавлено через 1 минуту
А вообще при таком размере - десятки мегабайт можно сильно не напрягаться
Читаем весь файл целиком в память одним read()

Memory-mapped files начинают помогать когда размер файлов несколько больше чем десятки мегабайт
0
08.03.2011, 16:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.03.2011, 16:28
Привет! Вот еще темы с решениями:

#include ,указание файла без полного пути.
По сабжу,есть 2010 студия,есть чужой код.Решил сесть,разобраться,и натолкнулся...

Выделить из полного имени файла название последнего каталога
Дана строка, содержащая полное имя файла. Выделить из этой строки название...

Из полного пути к файлу выделить только имя файла
Написать программу, которая по введённому полному пути к файлу выделяла бы ...

Разобрать строку по кускам
Здравствуйте! Помогите, пожалуйста, разобраться с токенами делящими строку на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru