Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
FireNovel
150 / 73 / 8
Регистрация: 09.04.2010
Сообщений: 297
#1

Что быстрее массив или файл - C++

16.07.2010, 12:56. Просмотров 726. Ответов 5
Метки нет (Все метки)

Привет!
Я тут занялся обработкой содержимого текстовых файлов
для этого пишу класс отслеживающий положение курсора в файле (типа номер строки; позиция на строке; текущий символ ну и т.д. - это не так важно)

и вдруг возник вопрос правильно ли я начал?

Т.е. я в конструкторе класса открываю файл и все его содержимое скидываю в динамический массив, закрываю файл и дальше работаю с масивом.
А вопрос собственно:
Не лучше ли будет в конструкторе открыть файл и пусть будет открыт до разрушения объекта (закроем его в деструкторе) и выполнять операции чтения по ходу надобноти (в основном читаю по одному символу, таким образом операций чтения может быть много).

Посоветуйте Правильно ли я поступаю, а то на душе не спокойно
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.07.2010, 12:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Что быстрее массив или файл (C++):

Что быстрее - двоичный или текстовый файл? - C++
Встал вопрос о времени чтения данных с диска, посему нужно выбрать быстрейший из этих двух способов хранения данных на внешнем носителе. ...

Что быстрее использовать, массив э-в, или указатель на массив э-в? - C++
уважаемые, что быстрее использовать, массив э-в, или указатель на массив э-в? или без разницы? С одной стороны обращается все к той же...

Массив: Что быстрее: mass[n] или *(mass+n)? - C++
Что быстрее: mass или *(mass+n) и стоит ли заморачиваться по этому поводу?

Что быстрее: i++ или ++i ? - C++
Только что прочитала в интернете, что префиксный итератор быстрее, чем постфиксный. Так ли это? Если так и если в С++ все есть обьект, то...

Что быстрее assembler или c++ - C++
Вопрос от новичка. Что будет быстрее по скорости выполнения и на сколько: 1) сложить a+b на C++ или на assembler 2) умножить a*b на C++...

Что быстрее списки или вектор ? - C++
Всем привет. Делаю приложение и очень важна скорость обработки данных, а нужно хранить динамические массивы. В каком формате будет...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
rrock.ru
9 / 9 / 1
Регистрация: 15.07.2010
Сообщений: 19
16.07.2010, 13:00 #2
Ну вообще операции с памятью намного быстрее выполняются, чем с жестким диском.. Но всё зависит от размера файла... если он достаточно большой, то будет подвисание при загрузке.. но во время работы массив в памяти по любому выигрывает по скорости... А если файл не большой, то в принципе разница и не особо будет заметна на современном железе...
1
MikeSoft
Эксперт С++
3799 / 1775 / 85
Регистрация: 21.11.2009
Сообщений: 2,540
16.07.2010, 13:51 #3
Цитата Сообщение от FireNovel Посмотреть сообщение
Не лучше ли будет в конструкторе открыть файл и пусть будет открыт до разрушения объекта (закроем его в деструкторе)
Нет, не лучше. Таким образом вы создадите эксклюзивную блокировку на использование файла. Параллельный доступ будет невозможен.

Считывать все данные сразу в динамический массив - тоже идея невыгодная.
Если файл будет большой, чтение/запись будет долгим, соответственно на этот момент программа подвиснет.

Сделайте чтение с использованием буфера. Открыли файл, прочитали к примеру, 4 кб из файла, закрыли файл, обработали содержимое, записали куда нужно... и повторяете цикл до завершения.
2
FireNovel
150 / 73 / 8
Регистрация: 09.04.2010
Сообщений: 297
16.07.2010, 14:13  [ТС] #4
Цитата Сообщение от rrock.ru Посмотреть сообщение
то в принципе разница и не особо будет заметна на современном железе...
У меня машина хоть и быстрая, но все же к программам отношусь, как если бы, машина была с памятью в 100 мб. Потому и вылазят вопросы производительности на один из первых планов
0
fasked
Эксперт С++
4936 / 2516 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
16.07.2010, 15:04 #5
Цитата Сообщение от MikeSoft Посмотреть сообщение
Если файл будет большой, чтение/запись будет долгим
если файл будет действительно большой, то читать будет просто некуда
1
FireNovel
150 / 73 / 8
Регистрация: 09.04.2010
Сообщений: 297
16.07.2010, 15:20  [ТС] #6
Цитата Сообщение от fasked Посмотреть сообщение
если файл будет действительно большой, то читать будет просто некуда
Ну, понятно, что файлы в 100 метров никто целиком в память грузить не будет.

Мне нужно было опрелелиться правильно ли я поступаю.
Так что, решил работать с массивом.
Спасибо за советы...
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.07.2010, 15:20
Привет! Вот еще темы с ответами:

If или switch().case. Что быстрее - C++
Есть два кода. Первый: if(a == 2) a += 2; if(a == 3) a+= 3; if(a == 4) a+=4; Второй:

Что быстрее, операция присваивания или сравнения? - C++
Всем доброго времени суток, такой вод у меня дурацкий вопрос сидит в голове, "Что быстрее, операция присваивания или сравнения?". Вот...

Деление с остатком или маска, что быстрее? - C++
Всем известно, что побитовый сдвиг (<<, >>) выполняется быстрее деления на два. Деление целых на 2 через битовый сдвиг - архаизм? и...

Что быстрее/эффективнее malloc/realloc или new/delete? - C++
Всем привет. Год программировал на СИ под микроконтроллеры... Начал изучать с++... Всё ново, интересно... Доковырялся до STL... В процессе...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
16.07.2010, 15:20
Ответ Создать тему
Опции темы

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