![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| BpIstorick |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 17.4.2006 Репутация: нет Всего: нет |
какой метод копирования лучше, то есть - быстрее идет, а так же меньше нагрузка на проц
Методы которые знаю - BlockRead, BlockWrite - SHFileOperation - CopyFile - потоковое копирование (но его фигова знаю какой из них приоритетен!, если есть что добавить то пжалуйста Какой из них вообще возможно реализовать с прогрессБаром (собственно ручно сделанным, а не виндовским) |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Еще есть файлы отображаемые в память. Если этот вопрос для вас принципиален, то скажу что однозначного ответа здесь нет - все зависит от размера файла и взаимного расположения источника и места назначения. Добавлено @ 00:45 Да любой если переписывать не файл целиком, а по частям. Добавлено @ 00:49 Для быстрого переписывания больших файлов (музыки, фильмов) с одного логического диска на другой желательно использовать большой буфер. Я один раз ради эксперимента написал такую програмку, так она работала В 2,5 РАЗА БЫСТРЕЕ чем копирование ч/з explorer и использовала буфер в 50МБ. Это сообщение отредактировал(а) alexeis1 - 8.7.2006, 01:57 -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Poseidon |
|
||||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 53 Всего: 133 |
BpIstorick, Используй BlockRead, BlockWrite. Там и буфер можно указать (о катором говорит alexeis1) и прогрессбар пределать и вообще любой контроль осуществить. Вот те пример:
Кстати, еще можно копировать методом LZExpand и матодом Windows. -------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
||||
|
|||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Мда -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| BpIstorick |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 17.4.2006 Репутация: нет Всего: нет |
Вопрос возник в принципе после прочтения большого количества подобных тем форума
Ситуация: два случая - с логического на логический - на сетевой диск Вопрос! При использовании BlockRead, BlockWrite наблюдал огромную нагрузку на проц! а это не есть ГУД Потом нашел строчку что 3*4*4096 of Byte есть оптимальный буффер, а вообще зависимость какая? больше буффер -> больше нагрузка на ХАРД, или здесь нелинейная??? и какия хитрости? p.s. В этом методе я разобрался лучше всего |
|||
|
||||
| Alexeis |
|
||||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Стоит потому что они позволяют копировать файлы более 4Гб.
Добавлено @ 14:56
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
||||
|
|||||
| BpIstorick |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 17.4.2006 Репутация: нет Всего: нет |
Спасибо всем за разъяснения
Это сообщение отредактировал(а) BpIstorick - 10.7.2006, 00:21 |
|||
|
||||
| BUGOR |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 325 Регистрация: 12.3.2006 Репутация: 5 Всего: 16 |
А почему про API ни слова? Мой опыт показывает, что файлы размером не больше 50 мб быстрее всего обрабатываются с помощью MMF(Memory Mapped Files), даже на 256 метрах памяти, ибо идёт проекция на память, а работа с оперативкой само собой намного быстрее работы с хардом, но файлы большего размера я советую копировать с помощью Read/WriteFile и при этом буфер брать размером не 50 метров, а 64 Кб.
|
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
с использую CopyFile - Винда сама копирует, и я не думаю, под какой версией работает моя прога, и не думаю, какого размера будет файл и какой размер буфера мне ставить. Это сообщение отредактировал(а) Akella - 10.7.2006, 10:00 |
|||
|
||||
| BpIstorick |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 17.4.2006 Репутация: нет Всего: нет |
А от чего вообще буфер высчитывается? от личного "хочу" или есть параметры к которым он привязывается Попробовал установить буфер размером
выдается сообщение "Stack Overflow" (как я понимаю это в переводе - стек перегружен...)! необходимо получается выделять отдельно память??? или в чем моя ошибка??? p.s. во вложении проект в котором ошибка! проект чисто для разбора с матерьялом создан Присоединённый файл ( Кол-во скачиваний: 5 )
CopyFile.zip 7,66 Kb |
||||
|
|||||
| Matematik |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1027 Регистрация: 11.3.2006 Репутация: 17 Всего: 50 |
||||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
точнее переполнен, это возникает либо при неправельной рекурсии, либо при обилии локальных данных! Добавлено @ 17:19 Динамическая память выделяется в куче, а не в стеке. Непойму к чему Добавлено @ 17:22 Конечно же! вот где собака зарыта! Надо было делать динамический массив! Matematik, sorry, теперь понял о чем шла речь с p:=AllocMem(BufSize) Это сообщение отредактировал(а) alexeis1 - 10.7.2006, 17:28 -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| BpIstorick |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 17.4.2006 Репутация: нет Всего: нет |
несколько раз вчитывался и вдумывался, но так и не понял в чем моя ошибка и где зарыта собака! 1. если я буду использовать динамический массив, то все получится??? 2. если буду динамически создавать буффер в виде выделенной памяти, то тоже все получится??? а чем мой статический массив не подошел??? в чем загвоздка??? p.s. и все равно никто не ответил! почему 64к или 48к буфер должен быть? из-за разрядности и доступа к памяти проще процессору обращаться(мои размышления)??? или все таки просто нужно поверить этому и забить |
|||
|
||||
| Alexeis |
|
||||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
И то и другое ВЕРНО! Он жрет память из стека, вот стек и закончился
это же целый мегабайт - размер всего стека, плюс прога еще расходует на внутренние цели, вот и закончился стек - stack overflow! Глупости, зависит от устройства передачи и приема! Для HDD обычно берут 2Mb -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
||||
|
|||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |