Автор | Сообщение |
|
| |
Пост N: 3263
Зарегистрирован: 17.05.05
|
|
Отправлено: 01.07.13 16:42. Заголовок: [?] Функция копирования файлов
Какая самая быстрая ? __Copyfile , Hb_fcopy и тд и тп
|
![](//forum24.ru/gif/img/pg.gif) |
![Профиль](//forum24.ru/gif/1/pr.gif)
|
Ответов - 28
, стр:
1
2
All
[только новые]
|
|
|
| moderator
|
Пост N: 492
Зарегистрирован: 11.02.10
|
|
Отправлено: 01.07.13 17:02. Заголовок: Dima пишет: Какая с..
Dima пишет: По-видимому, Hb_fcopy() будет побыстрее, поскольку она использует буфер размером 65536 (против 8192 у функции __Copyfile())
|
![](//forum24.ru/gif/img/pg.gif) |
![Профиль](//forum24.ru/gif/1/pr.gif)
|
|
| |
Пост N: 3264
Зарегистрирован: 17.05.05
|
|
Отправлено: 01.07.13 17:10. Заголовок: gfilatov2002 Спасиб..
gfilatov2002 Спасибо !
|
![](//forum24.ru/gif/img/pg.gif) |
![Профиль](//forum24.ru/gif/1/pr.gif)
|
|
| |
Пост N: 898
Зарегистрирован: 11.06.10
|
|
Отправлено: 01.07.13 20:01. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | По-видимому, Hb_fcopy() будет побыстрее |
|
Вопрос спорный, и скорее верного ответа тут нет, поскольку зависит от размера файла, железа и т.п.
|
![](//forum24.ru/gif/img/pg.gif) |
![Профиль](//forum24.ru/gif/1/pr.gif)
|
|
| постоянный участник
|
Пост N: 889
Зарегистрирован: 27.01.07
|
|
Отправлено: 01.07.13 20:55. Заголовок: Что, откуда и куда т..
Что, откуда и куда тоже важно. Если по сети, то будет иметь значение, поддерживают ли сетевые интерфейсы и коммутаторы jumbo-фрейм, к примеру...
|
![](//forum24.ru/gif/img/pg.gif) |
![Профиль](//forum24.ru/gif/1/pr.gif)
|
|
| постоянный участник
|
Пост N: 2890
Зарегистрирован: 12.09.06
|
|
Отправлено: 01.07.13 23:53. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Hb_fcopy() будет побыстрее |
| А бегунок к ней можно приделать (для Харбора и Минигуи) ?
|
![](//forum24.ru/gif/img/pg.gif) |
![Профиль](//forum24.ru/gif/1/pr.gif)
|
|
| Администратор
|
Пост N: 2908
Зарегистрирован: 23.05.05
|
|
Отправлено: 02.07.13 08:39. Заголовок: Andrey пишет: А бег..
Andrey пишет: цитата: | А бегунок к ней можно приделать (для Харбора и Минигуи) ? |
| Чтобы приделать, надо попросить разработчиков добавить в hb_fcopy необязательный 3-й параметр - блок кода, который вызывался бы в процессе копирования.
|
![](//forum24.ru/gif/img/pg.gif) |
![Профиль](//forum24.ru/gif/1/pr.gif)
|
|
| |
Пост N: 3265
Зарегистрирован: 17.05.05
|
|
Отправлено: 02.07.13 11:18. Заголовок: Вообще то быстрее ст..
Вообще то быстрее стало работать с hb_fcopy Процедура была такая. В цикле локально копирую открытую базу порядка 1 гига (через RPC) Затем архивация этой копии (через RPC) Затем копирование архива по сети. На все уходило 2 минуты После переделки на все уходит 1 минута 30 секунд.
|
![](//forum24.ru/gif/img/pg.gif) |
![Профиль](//forum24.ru/gif/1/pr.gif)
|
|
| постоянный участник
|
Пост N: 2891
Зарегистрирован: 12.09.06
|
|
Отправлено: 02.07.13 20:13. Заголовок: Pasha пишет: надо п..
Pasha пишет: цитата: | надо попросить разработчиков добавить в hb_fcopy необязательный 3-й параметр - блок кода, который вызывался бы в процессе копирования. |
| А как можно попросить ? Я по английски не очень... Файлы по 100-200 Мб нужно копировать на флешку. Операция медленная...
|
![](//forum24.ru/gif/img/pg.gif) |
![Профиль](//forum24.ru/gif/1/pr.gif)
|
|
| |
Пост N: 3266
Зарегистрирован: 17.05.05
|
|
Отправлено: 02.07.13 21:15. Заголовок: Andrey Попроси Пашу..
Andrey Попроси Пашу :) PS Но насколько я помню ты Harbour не юзаешь а подсел на Xharbour
|
![](//forum24.ru/gif/img/pg.gif) |
![Профиль](//forum24.ru/gif/1/pr.gif)
|
|
| Администратор
|
Пост N: 2909
Зарегистрирован: 23.05.05
|
|
Отправлено: 02.07.13 21:44. Заголовок: Andrey пишет: А как..
Andrey пишет: Зарегистрироваться на https://groups.google.com/forum/#!forum/harbour-devel и отправить туда сообщение. Всего-то. Только вежливо и аргументированно :-) цитата: | Я по английски не очень... |
| Я тоже. Но есть translate.google.ru, другие online переводчики, да и другие способы. Было бы желание.
|
![](//forum24.ru/gif/img/pg.gif) |
![Профиль](//forum24.ru/gif/1/pr.gif)
|
|
| Администратор
|
Пост N: 2910
Зарегистрирован: 23.05.05
|
|
Отправлено: 02.07.13 21:50. Заголовок: Dima пишет: Andrey ..
Dima пишет: Уже написал цитата: | PS Но насколько я помню ты Harbour не юзаешь а подсел на Xharbour |
| Сюрприз. Оказывается, в __CopyFile из xHarbour поддерживается 3-й параметр - блок кода для прогресс-бара. Только размер буфера копирования там маленький: 8192
|
![](//forum24.ru/gif/img/pg.gif) |
![Профиль](//forum24.ru/gif/1/pr.gif)
|
|
|
| |
Пост N: 3267
Зарегистрирован: 17.05.05
|
|
Отправлено: 02.07.13 22:12. Заголовок: Pasha пишет: Сюрпри..
Pasha пишет:
|
![](//forum24.ru/gif/img/pg.gif) |
![Профиль](//forum24.ru/gif/1/pr.gif)
|
|
| постоянный участник
|
Пост N: 2892
Зарегистрирован: 12.09.06
|
|
Отправлено: 03.07.13 12:57. Заголовок: Pasha пишет: Сюрпри..
Pasha пишет: цитата: | Сюрприз. Оказывается, в __CopyFile из xHarbour поддерживается 3-й параметр - блок кода для прогресс-бара. Только размер буфера копирования там маленький: 8192 |
| Мне для МиниГуи надо, т.е. для Харбора ! Я отдельную утилиту (архивирование баз) делаю на МиниГуи... И уже попробовал функцию HB_FCOPY() - очень шустро работает....
|
![](//forum24.ru/gif/img/pg.gif) |
![Профиль](//forum24.ru/gif/1/pr.gif)
|
|
| Администратор
|
Пост N: 2917
Зарегистрирован: 23.05.05
|
|
Отправлено: 09.07.13 20:42. Заголовок: На comp.lang.xharbou..
На comp.lang.xharbour тоже захотели быстрого копирования файла. И тоже обнаружили, что filecopy из ct с буфером 8к быстрее, чем copy file с буфером 512 байт. hb_fcopy с буфером 32к в xHarbour нет, а хочется еще быстрее. Enrico подсказал самое быстрое и простое решение для windows: #include "Hbdll.ch" FUNCTION MAIN() ? COPYFILE( cSource, cDest ) RETURN NIL DLL FUNCTION COPYFILE( cExistingFileName AS LPSTR, cNewFileName AS LPSTR, lFailIfExists AS LONG ) AS BOOL; PASCAL FROM "CopyFileA" LIB "kernel32.dll" В этом случае непосредственно используется функция winapi, и какой там буфер - неизвестно. Но, судя по тестам, работает она раза в 4 быстрее первых двух функций. Вот только прогресс-бар ака бегунок туда не прикрутить.. PS Мне, кстати, в harbour dev так никто и не ответил.
|
![](//forum24.ru/gif/img/pg.gif) |
![Профиль](//forum24.ru/gif/1/pr.gif)
|
|
| |
Пост N: 3286
Зарегистрирован: 17.05.05
|
|
Отправлено: 09.07.13 21:20. Заголовок: Pasha Не совсем пон..
Pasha Не совсем понял , предложенный вариант будет быстрее чем hb_fcopy , так ?
|
![](//forum24.ru/gif/img/pg.gif) |
![Профиль](//forum24.ru/gif/1/pr.gif)
|
|
| Администратор
|
Пост N: 2918
Зарегистрирован: 23.05.05
|
|
Отправлено: 09.07.13 21:30. Заголовок: Dima пишет: Не совс..
Dima пишет: цитата: | Не совсем понял , предложенный вариант будет быстрее чем hb_fcopy , так ? |
| Не тестировал, но должен работать быстрее. hb_fcopy открывает исходный файл - создает результирующий. Затем порциями по 32к читает/пишет данные. А через CopyFileA все делается одним вызовом функции winapi. А уж она должна быть предельно оптимизирована, это же системная функция.
|
![](//forum24.ru/gif/img/pg.gif) |
![Профиль](//forum24.ru/gif/1/pr.gif)
|
|
| |
Пост N: 3288
Зарегистрирован: 17.05.05
|
|
Отправлено: 09.07.13 21:38. Заголовок: Pasha Выше приведен..
Pasha Выше приведенный код в Harbour сработает ?
|
![](//forum24.ru/gif/img/pg.gif) |
![Профиль](//forum24.ru/gif/1/pr.gif)
|
|
| Администратор
|
Пост N: 2919
Зарегистрирован: 23.05.05
|
|
Отправлено: 09.07.13 22:02. Заголовок: Dima пишет: Выше пр..
Dima пишет: цитата: | Выше приведенный код в Harbour сработает ? |
| Да. Только надо собирать с библиотекой xhb, и нужны *.ch из contrib\xhb
|
![](//forum24.ru/gif/img/pg.gif) |
![Профиль](//forum24.ru/gif/1/pr.gif)
|
|
| Администратор
|
Пост N: 2920
Зарегистрирован: 23.05.05
|
|
Отправлено: 09.07.13 22:43. Заголовок: Для Harbour лучше вы..
Для Harbour лучше вызывать эту функцию по другому: #include "hbdyn.ch" FUNCTION MAIN(cSource, cDest) hb_DynCall( { "CopyFileA", "kernel32.dll", HB_DYN_CALLCONV_STDCALL }, cSource, cDest, 0 ) RETURN NIL
|
![](//forum24.ru/gif/img/pg.gif) |
![Профиль](//forum24.ru/gif/1/pr.gif)
|
|
| |
Пост N: 3289
Зарегистрирован: 17.05.05
|
|
Отправлено: 09.07.13 22:46. Заголовок: Pasha А если с neti..
Pasha А если с netio то как правильно собрать сервер netio для серверов 2003 ,2008 , 2012 ? PS Скажем для использования hb_fcopy , делаю это всего одной строкой request hb_fcopy
|
![](//forum24.ru/gif/img/pg.gif) |
![Профиль](//forum24.ru/gif/1/pr.gif)
|
|
| Администратор
|
Пост N: 2921
Зарегистрирован: 23.05.05
|
|
Отправлено: 09.07.13 23:08. Заголовок: Dima пишет: А если ..
Dima пишет: цитата: | А если с netio то как правильно собрать сервер netio для серверов 2003 ,2008 , 2012 ? PS Скажем для использования hb_fcopy , делаю это всего одной строкой request hb_fcopy |
| Не понял. сборка сервера netio обычная. Лучше netio собирать как сервис. Для использования hb_fcopy дать request на нее, все правильно. Можно конечно использовать CopyFileA и на сервере netio. Для этого надо дать request на hb_DynCall, а с клиента вызов будет таким: net:hb_DynCall( { "CopyFileA", "kernel32.dll", HB_DYN_CALLCONV_STDCALL }, cSource, cDest, 0 ) Но надо попробовать. Кажется, должно сработать.
|
![](//forum24.ru/gif/img/pg.gif) |
![Профиль](//forum24.ru/gif/1/pr.gif)
|
|
|
| |
Пост N: 3291
Зарегистрирован: 17.05.05
|
|
Отправлено: 10.07.13 08:36. Заголовок: Pasha пишет: Лучше ..
Pasha пишет: цитата: | Лучше netio собирать как сервис |
| Так и делаю. Pasha пишет: Пробну , спасибо !
|
![](//forum24.ru/gif/img/pg.gif) |
![Профиль](//forum24.ru/gif/1/pr.gif)
|
|
| |
Пост N: 3292
Зарегистрирован: 17.05.05
|
|
Отправлено: 10.07.13 08:51. Заголовок: Пробнул. Да быстрее ..
Пробнул. Да быстрее работает. Через RPC Hb_fcopy время копирования 1 минута 35 сек Через RPC с новой функцией 1 минута 10 сек А на Windows Server 2012 64 бит будет работать "CopyFileA" из Kernel32 ?
|
![](//forum24.ru/gif/img/pg.gif) |
![Профиль](//forum24.ru/gif/1/pr.gif)
|
|
| |
Пост N: 3293
Зарегистрирован: 17.05.05
|
|
Отправлено: 10.07.13 08:59. Заголовок: Pasha пишет: а с кл..
Pasha пишет: цитата: | а с клиента вызов будет таким: net:hb_DynCall( { "CopyFileA", "kernel32.dll", HB_DYN_CALLCONV_STDCALL }, cSource, cDest, 0 ) |
| я сделал так netio_funcexec("hb_DynCall",{ "CopyFileA", "kernel32.dll", HB_DYN_CALLCONV_STDCALL },cSource,cDest,0)
|
![](//forum24.ru/gif/img/pg.gif) |
![Профиль](//forum24.ru/gif/1/pr.gif)
|
|
| Администратор
|
Пост N: 2923
Зарегистрирован: 23.05.05
|
|
Отправлено: 10.07.13 09:59. Заголовок: Dima пишет: А на Wi..
Dima пишет: цитата: | А на Windows Server 2012 64 бит будет работать "CopyFileA" из Kernel32 ? |
| Почему бы нет ? Эта dll есть и в system32, и в SysWOW64 (это в win7 64-bit). Ее почему-то не переименовали. Правда, это неуникодная функция, ее уникодный аналог - CopyFileW.
|
![](//forum24.ru/gif/img/pg.gif) |
![Профиль](//forum24.ru/gif/1/pr.gif)
|
|
| |
Пост N: 4225
Зарегистрирован: 17.05.05
|
|
Отправлено: 06.10.14 14:08. Заголовок: Ни кто не проверял ,..
Ни кто не проверял , что будет если при копировании файла по сети с помощью Hb_Fcopy неожиданно ляжет сеть , что вернет Hb_Fcopy ? У себя проверить не могу так как сети нет.
|
![](//forum24.ru/gif/img/pg.gif) |
![Профиль](//forum24.ru/gif/1/pr.gif)
|
|
| постоянный участник
|
Пост N: 3641
Зарегистрирован: 12.09.06
|
|
Отправлено: 06.10.14 16:02. Заголовок: Где то это мы уже об..
Где то это мы уже обсуждали эти команды.... Я остановился на Hb_Fcopy ! Dima пишет: цитата: | Hb_Fcopy неожиданно ляжет сеть , что вернет Hb_Fcopy ? У себя проверить не могу так как сети нет. |
| Возьми и копируй файл на флешку или дискету, а потом вытащи, получишь точно такую же ошибку !
|
![](//forum24.ru/gif/img/pg.gif) |
![Профиль](//forum24.ru/gif/1/pr.gif)
|
|
| |
Пост N: 4226
Зарегистрирован: 17.05.05
|
|
Отправлено: 06.10.14 16:28. Заголовок: Andrey Да я уже доп..
Andrey Да я уже допер ;) А вот дискет уже не имею так как дисковода нет. Флешку решил не мучать и сделал копирование на расшаренный ресурс вида \\127.0.0.1\TEST , во время копирования снял галю на папке что она расшарена. Получил -1 , что хорошо.
|
![](//forum24.ru/gif/img/pg.gif) |
![Профиль](//forum24.ru/gif/1/pr.gif)
|
Ответов - 28
, стр:
1
2
All
[только новые]
|
|