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

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

Войти
Регистрация
Восстановить пароль
 
razorkam
0 / 0 / 0
Регистрация: 28.11.2014
Сообщений: 9
#1

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

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

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

Проблема при считывании из файла - C++
Пишу простенькую программу по криптографии. В результате шифрования получается txt файлик с набором закорючек(он во вложении). Для...

Переполнение при считывании из файла - C++
Подскажите пожалуйста, где ошибка, вот код чтения из файла: void read_file(void) { int mass; FILE* file = fopen(&quot;arr.txt&quot;, &quot;r&quot;); ...

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

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

Конец файла при потоковом считывании - C++
if (fin.eof()==0){ cout &lt;&lt; &quot;aaa&quot;; int asa; asa = (int)buf; fout.write((char*)buf, sizeof(buf - asa)); } вот...

Лишние биты при считывании файла - C++
Нужно порциями по 63 байта считать текст из файла. &quot;in&quot; - мой открытый файл для чтения. Вот отрывок из кода fseek(in, 0, SEEK_END); ...

9
nmcf
5776 / 5087 / 1739
Регистрация: 14.04.2014
Сообщений: 20,830
30.01.2015, 19:38 #2
Почему ты думаешь, что считывание по частям поможет?
0
1XPLoade1
30 / 30 / 17
Регистрация: 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
Эксперт С++
4920 / 3028 / 372
Регистрация: 10.11.2010
Сообщений: 11,085
Записей в блоге: 10
Завершенные тесты: 1
30.01.2015, 19:51 #4
Цитата Сообщение от 1XPLoade1 Посмотреть сообщение
Во-первых, для обеспечения максимальной производительности при считывании файлов 15-20 мб., следует использовать thread'ы и параллельное программирование.
Это глупость. Параллельное считывание с одного носителя лишь замедлит процесс.

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

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

Во-вторых, сократить время считывания из файла 20 мб нельзя, это операция выполняется асинхронно, а оптимизировать размер буфера в памяти - можно. я написал выше как это сделать.
0
castaway
Эксперт С++
4920 / 3028 / 372
Регистрация: 10.11.2010
Сообщений: 11,085
Записей в блоге: 10
Завершенные тесты: 1
30.01.2015, 20:30 #6
Добавлено через 14 секунд
Цитата Сообщение от 1XPLoade1 Посмотреть сообщение
castaway, thread'ы и паралельное программирование необходимо чтобы при считывании данных из файла в буфер оптимально распределить процессорное время между данным приложением и другими приложениями, которые выполняются в среде ядра.
Во-вторых, сократить время считывания из файла 20 мб нельзя, это операция выполняется асинхронно, а оптимизировать размер буфера в памяти - можно. я написал выше как это сделать.
Говоришь красиво, но не правильно.
0
1XPLoade1
30 / 30 / 17
Регистрация: 23.01.2015
Сообщений: 174
30.01.2015, 20:55 #7
Говоришь красиво, но не правильно.
Объясните почему ?!?!?!?!
0
DU
1484 / 1130 / 45
Регистрация: 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
Эксперт С++
4920 / 3028 / 372
Регистрация: 10.11.2010
Сообщений: 11,085
Записей в блоге: 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
Привет! Вот еще темы с ответами:

Неверная кодировка при считывании из файла - C++
Проблема такая, при считывание из файла идет кракозябра, как это исправитьsetlocale(LC_ALL, &quot;rus&quot;); FILE *fp; if(!(fp =...

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

Переполнение строки при считывании из файла - C++
Считываю я строки из файла, в котором их 500 тысяч. Если строка начинается на R, то я записываю её в другой файл. Примерно на 312000-й...

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


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

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

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