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

C++

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

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

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

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

Зависание при копировании файла - C++ Builder
При копировании файла функцией CopyFile происходит периодическое зависание приложения. DeleteFileA((newpath+find_+dbf).c_str()); ...

Ошибки при определении размера файла - C++ Builder
Всем добрый день . Пищу код такои : int folders_count = 0 ; int file_size = 0 ; void ListFiles(AnsiString path, TStrings*...

Иконка приложения большого размера (Rad Studio 2010) - C++ Builder
Добрый день, программисты. Возникла проблема с добавлением иконки проекта в среде Rad Studio. Иконки размера 128х128 добавляются без...

Массивы данных большого размера - Visual C++
Проблема следующая. В программе (в заголовочных файлах) объявлено некоторое количество переменных и массивов, общий объем, ими занимаемый...

OFNHookProc переопределение размера буфера названия файла - C++ WinAPI
Есть диалог выбора файлов, в котором включен множественный выбор. Вопрос в том, можно ли переопределить размер буфера для выбранных файлов,...

Получение фактического размера и размера файла в байтах - C++ WinAPI
Здравствуйте, уважаемые форумчане! Мне необходимо получить фактический размер, занимаемый файлом на диске, и размер файла в байтах...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
_Dimon_
1386 / 546 / 85
Регистрация: 31.10.2011
Сообщений: 1,933
22.04.2013, 10:13 #2
Цитата Сообщение от Кудя Посмотреть сообщение
Я сделал множество тестов, проверяя зависимость размера буфера от скорости копирования(меняя каждый раз размер) и понял, что размер буфера играет большую роль в скорости копирования.
Так если сделано много тестов то почему возник такой вопрос?
При каком размере буфера получилось быстрей всего скопировать файл?

Да и скорость копирования зависит не только от алгоритма, а от железа, файловой системы, фрагментированости раздела и тд и тп
Dmitriy_M
1342 / 1223 / 112
Регистрация: 20.03.2009
Сообщений: 4,406
Записей в блоге: 11
22.04.2013, 11:44 #3
Цитата Сообщение от Кудя Посмотреть сообщение
если вы покажите кодом формулу высчитывания.
Это узнается эмпирическим путем(в ходе экспериментов).
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,368
22.04.2013, 14:00 #4
Зависит еще от того, как копировать файл. В Винде, например, есть специальная API функция CopyFile, которая сама разберется с оптимальным размером буферов, - ведь у самой Винды гораздо больше информации о текущей версии ОС, файловой системе, фрагментированности диска и т.п., не так ли?
Kastaneda
Форумчанин
Эксперт С++
4652 / 2860 / 228
Регистрация: 12.12.2009
Сообщений: 7,268
Записей в блоге: 2
Завершенные тесты: 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 Посмотреть сообщение
Можно посмотреть в сторону т.н. "генетического алгоритма"
Вот я это хочу. Программа будет смотреть на возможности компьютера и высчитывать удобные способы реализации
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.04.2013, 18:15
Привет! Вот еще темы с ответами:

Как отцепить string от буфера при копировании - C++
Так работает: { std::string m_buff; char * p_tempStr = new char; strcpy((LPSTR)p_tempStr, "Привет мир!\0"; m_buff =...

Ошибка при создании массива большого размера - C++
Массив int m; выдает ошибку Винды в чем дела? с 5 9-ми все нормально Добавлено через 19 минут точнее выше 519999 выдает ошибку при...

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

Ошибка при копировании строки в конец файла - C++
Здравствуйте! Написал программу которая ищет заданный символ в текстовом файле и копирует первую строку в которой встречается этот символ в...


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

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

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