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

Оптимальный буфер при считывании файла для максимальной производительности

30.01.2015, 19:12. Просмотров 539. Ответов 9
Метки нет (Все метки)

Считываю из файла в буфер средствами <unistd.h>, затем собираю байты в числа и заполняю числами массив. Так вот, каков оптимальный размер буфера для считывания для максимальной производительности? Считывание сразу всего файла дает не самый лучший результат.
P.S. Файлы размером 15-20 мб
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.01.2015, 19:12
Ответы с готовыми решениями:

Проблема при считывании из файла
Пишу простенькую программу по криптографии. В результате шифрования получается...

Переполнение при считывании из файла
Подскажите пожалуйста, где ошибка, вот код чтения из файла: void...

При считывании из файла не выводится отчество
Необходимо прочитать из файла фамилию студента, имя и отчество. И вывеси на...

Лишние символы при считывании файла
Считываю структуру с файла и вывожу в консоль, при выводе появляются лишние...

Ошибка, при считывании инфы с файла...
Вот есть код:#include &lt;iostream.h&gt; #include &lt;conio.h&gt; #include &lt;string.h&gt;...

9
nmcf
6271 / 5577 / 2537
Регистрация: 14.04.2014
Сообщений: 23,468
30.01.2015, 19:38 #2
Почему ты думаешь, что считывание по частям поможет?
0
1XPLoade1
30 / 30 / 38
Регистрация: 23.01.2015
Сообщений: 174
30.01.2015, 19:38 #3
Считываю из файла в буфер средствами <unistd.h>, затем собираю байты в числа и заполняю числами массив. Так вот, каков оптимальный размер буфера для считывания для максимальной производительности? Считывание сразу всего файла дает не самый лучший результат.
P.S. Файлы размером 15-20 мб
Во-первых, для обеспечения максимальной производительности при считывании файлов 15-20 мб., следует использовать thread'ы и параллельное программирование. Если это Linux/UNIX то используйте boost вместо unistd.h, так будет эффективнее, он более функциональный.
Во-вторых, что касается оптимального размера буфера, то размер буфера желательно увеличивать динамически по мере записи элементов массива в него. Если это апа под win32, то желательно использовать функции VirtualAlloc(...),..., для организации буфера в глобальном хипе ядра Kernel, если же это Linux/UNIX, то желательно воспользоваться или реализовать свой менеджер памяти хотя бы для работы с буфером. Поинтересуйтесь есть ли что-либо подобное в boost, я без руля
0
castaway
Эксперт С++
4930 / 3037 / 453
Регистрация: 10.11.2010
Сообщений: 11,116
Записей в блоге: 10
Завершенные тесты: 1
30.01.2015, 19:51 #4
Цитата Сообщение от 1XPLoade1 Посмотреть сообщение
Во-первых, для обеспечения максимальной производительности при считывании файлов 15-20 мб., следует использовать thread'ы и параллельное программирование.
Это глупость. Параллельное считывание с одного носителя лишь замедлит процесс.

Добавлено через 1 минуту
1XPLoade1, ты в корне не понимаешь о чём говоришь. Скорее всего потому, что никогда с этим не работал.
0
1XPLoade1
30 / 30 / 38
Регистрация: 23.01.2015
Сообщений: 174
30.01.2015, 20:07 #5
Это глупость. Параллельное считывание с одного носителя лишь замедлит процесс.

Добавлено через 1 минуту
1XPLoade1, ты в корне не понимаешь о чём говоришь. Скорее всего потому, что никогда с этим не работал.
castaway, thread'ы и паралельное программирование необходимо чтобы при считывании данных из файла в буфер оптимально распределить процессорное время между данным приложением и другими приложениями, которые выполняются в среде ядра.

Во-вторых, сократить время считывания из файла 20 мб нельзя, это операция выполняется асинхронно, а оптимизировать размер буфера в памяти - можно. я написал выше как это сделать.
0
castaway
Эксперт С++
4930 / 3037 / 453
Регистрация: 10.11.2010
Сообщений: 11,116
Записей в блоге: 10
Завершенные тесты: 1
30.01.2015, 20:30 #6
Добавлено через 14 секунд
Цитата Сообщение от 1XPLoade1 Посмотреть сообщение
castaway, thread'ы и паралельное программирование необходимо чтобы при считывании данных из файла в буфер оптимально распределить процессорное время между данным приложением и другими приложениями, которые выполняются в среде ядра.
Во-вторых, сократить время считывания из файла 20 мб нельзя, это операция выполняется асинхронно, а оптимизировать размер буфера в памяти - можно. я написал выше как это сделать.
Говоришь красиво, но не правильно.
0
1XPLoade1
30 / 30 / 38
Регистрация: 23.01.2015
Сообщений: 174
30.01.2015, 20:55 #7
Говоришь красиво, но не правильно.
Объясните почему ?!?!?!?!
0
DU
1486 / 1132 / 164
Регистрация: 05.12.2011
Сообщений: 2,279
30.01.2015, 22:15 #8
ничего не скажу на счет всяких системных хитростей. порассуждаю в рамках тех функций, которые вы используете. вы используете функцию, которая читает из файла данные в буфер, который ей передали.
внутри эта функция скорее всего хорошо написана и оптимально запишет данные в предоставленный буфер.
поэтому, если у вас есть возможность выделить буфер размером в файл, то эта функция оптимально прочитает
файл в этот буфер. логично? если же буфер меньше размеров файлов - то тут наверно тесты по
производительности писать надо и смотреть, что они скажут.
0
razorkam
0 / 0 / 0
Регистрация: 28.11.2014
Сообщений: 9
31.01.2015, 00:00  [ТС] #9
Как раз замеры производительности говорят, что кусками -быстрее чем полностью. Но подобрать оптимальные куски не получается,т.к. на одних и тех же кусках производительность часто разная
0
castaway
Эксперт С++
4930 / 3037 / 453
Регистрация: 10.11.2010
Сообщений: 11,116
Записей в блоге: 10
Завершенные тесты: 1
31.01.2015, 09:21 #10
Цитата Сообщение от 1XPLoade1 Посмотреть сообщение
Объясните почему ?!?!?!?!
Случайный доступ к памяти медленнее чем последовательный.
0
31.01.2015, 09:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.01.2015, 09:21

Разъясните ошибки при считывании файла
не пойму что от меня требуется тут) пол года изучаем язык) часть ошибок...

Лишние биты при считывании файла
Нужно порциями по 63 байта считать текст из файла. &quot;in&quot; - мой открытый файл для...

Неверная кодировка при считывании из файла
Проблема такая, при считывание из файла идет кракозябра, как это...


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

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

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