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

C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.92
Кудя
1 / 1 / 0
Регистрация: 31.03.2012
Сообщений: 93
#1

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

21.04.2013, 23:47. Просмотров 1615. Ответов 5
Метки нет (Все метки)

Здравствуйте! Программа может копировать большие файлы(>4GB). Но немалую роль играет оптимизация самого процесса копирования. Думаю всем известно - при копировании больших файлов, файл "по кускам" копируется в другой файл, а размер "куска" определяется буфером, который используется. Я сделал множество тестов, проверяя зависимость размера буфера от скорости копирования(меняя каждый раз размер) и понял, что размер буфера играет большую роль в скорости копирования. Но как можно высчитать оптимальный размер буфера? Буду превысоко благодарен, если вы покажите кодом формулу высчитывания.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.04.2013, 23:47     Высчитывание оптимального размера буфера при копировании большого файла
Посмотрите здесь:

C++ Создание бесконечно большого буфера
Статический массив большого размера C++
Зависание при копировании файла C++ Builder
Visual C++ Массивы данных большого размера
C++ Linux Ошибка сегментирования (core dumped) при обработке файла большого размера
C++ Передача большого буфера даных
Безуспешное освобождение памяти большого размера C++
Вычисление суммы в массивах большого размера C++
C++ Как отцепить string от буфера при копировании
C++ WinAPI OFNHookProc переопределение размера буфера названия файла
C++ Ошибка при создании массива большого размера
Ошибка при копировании строки в конец файла C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
_Dimon_
1374 / 534 / 82
Регистрация: 31.10.2011
Сообщений: 1,880
22.04.2013, 10:13     Высчитывание оптимального размера буфера при копировании большого файла #2
Цитата Сообщение от Кудя Посмотреть сообщение
Я сделал множество тестов, проверяя зависимость размера буфера от скорости копирования(меняя каждый раз размер) и понял, что размер буфера играет большую роль в скорости копирования.
Так если сделано много тестов то почему возник такой вопрос?
При каком размере буфера получилось быстрей всего скопировать файл?

Да и скорость копирования зависит не только от алгоритма, а от железа, файловой системы, фрагментированости раздела и тд и тп
Dmitriy_M
1334 / 1215 / 110
Регистрация: 20.03.2009
Сообщений: 4,338
Записей в блоге: 11
22.04.2013, 11:44     Высчитывание оптимального размера буфера при копировании большого файла #3
Цитата Сообщение от Кудя Посмотреть сообщение
если вы покажите кодом формулу высчитывания.
Это узнается эмпирическим путем(в ходе экспериментов).
CheshireCat
Эксперт С++
2890 / 1239 / 78
Регистрация: 27.05.2008
Сообщений: 3,325
22.04.2013, 14:00     Высчитывание оптимального размера буфера при копировании большого файла #4
Зависит еще от того, как копировать файл. В Винде, например, есть специальная API функция CopyFile, которая сама разберется с оптимальным размером буферов, - ведь у самой Винды гораздо больше информации о текущей версии ОС, файловой системе, фрагментированности диска и т.п., не так ли?
Kastaneda
Форумчанин
Эксперт С++
4258 / 2790 / 219
Регистрация: 12.12.2009
Сообщений: 7,118
Записей в блоге: 1
Завершенные тесты: 1
24.04.2013, 19:26     Высчитывание оптимального размера буфера при копировании большого файла #5
Можно посмотреть в сторону т.н. "генетического алгоритма" и при помощи него вычеслить оптимальный размер буфера. Но, как уже написали выше, надежней будет возложить это дело на плечи ОС.
Кудя
1 / 1 / 0
Регистрация: 31.03.2012
Сообщений: 93
26.04.2013, 18:15  [ТС]     Высчитывание оптимального размера буфера при копировании большого файла #6
Цитата Сообщение от _Dimon_ Посмотреть сообщение
Так если сделано много тестов то почему возник такой вопрос?
так эти тесты показали мне лишь оптимальный размер буфера на компьютере, где этот тест проводился. А если компьютер слабый, а если наоборот сильный? Я считаю очень многое влияет, вот я и хочу понять, как программно выяснить. Если я непонятно излагаю, может так получится: Программа должна адаптироваться в среде, где находится(слабый/сильный/нормальный/по середине слабого-сильного/и так далее)

Добавлено через 3 минуты
Цитата Сообщение от CheshireCat Посмотреть сообщение
есть специальная API функция CopyFile
Я проделал тесты и в этой области: Беру файл большого размера(с малыми файлами не отследить/трудно отследить скорость копирования), и одна программа копирует с помощью CopyFile, а другая копирует Блоками. По статистике, составленной мною, было ясно, что копирование Поблочно быстрее(не помню разницу во времени, давно это было)

Добавлено через 2 минуты
Хм...Только сейчас пришла мысль: Может блоками копируется то и быстрее, но CopyFile, если учитывает характеристики компьютера, стабильнее в разных средах обитания. Интересно

Добавлено через 2 минуты
Цитата Сообщение от Kastaneda Посмотреть сообщение
Можно посмотреть в сторону т.н. "генетического алгоритма"
Вот я это хочу. Программа будет смотреть на возможности компьютера и высчитывать удобные способы реализации
Yandex
Объявления
26.04.2013, 18:15     Высчитывание оптимального размера буфера при копировании большого файла
Ответ Создать тему
Опции темы

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