|
|
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
misha mikem52Вы просто наверное не в курсе, что самая быстрая функция копирования - это именно CopyFile, особенно, по локальной сети (не CopyFileEx и не вручную по-блочно). CopyFile была выбрана из соображения скорости копирования. Работа с диском (сетью) -- это всегда работа с диском (сетью) и никаких чудес тут не бывает. Думаете эта функция волшебная? Единственный способ заметно ускорить копирование -- совместить во времени чтение следующего блока из источника с записью предыдущего блока на назначение. Это ускорит процесс при условии, что источник и назначение -- не одно устройство, и они не находятся за общим узким каналом связи. Неужели так трудно реализовать этот простой алгоритм и нужно плодить говнософт, который киляет активные потоки и оставляет заблокированные файлы в системе? Вы с выбором профессии не ошиблись? Кстати, помнится, по бенчмаркам плагин bcopy для FAR Manager даже несколько быстрее, чем CopyFile. Вот где настоящая магия! Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2017, 13:36:32 |
|
||
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
чччДНяшик, ничем не обоснованные фантазии. Да ты что!) Смотри выше, а человек говорит работает быстрее и чудеса!) А такая же реализация ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2017, 13:37:10 |
|
||
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
Няшик, а может и CopyFileEx3 , не помню уже. Но речь как бы не о плагинах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2017, 13:45:16 |
|
||
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
m52Вы просто наверное не в курсе, что самая быстрая функция копирования - это именно CopyFile, особенно, по локальной сети (не CopyFileEx и не вручную по-блочно). CopyFile была выбрана из соображения скорости копирования. Вот не поленился, взял исходники Windows, и знаете, что я там нашел? Именно то, что и без исходников понятно любому нормальному человеку. \private\windows\base\client\fileopcr.c Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. Оказывается, что ваша "мегабыстрая" CopyFile внутри невозбранно вызывает "тормознутую" CopyFileEx. Вот это поворот, не правда ли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2017, 14:06:34 |
|
||
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
misha mikeНяшик, а может и CopyFileEx3 , не помню уже. Но речь как бы не о плагинах. Выглядит очень сложным, и нагромождённым... Скорее первый вариант ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2017, 14:08:12 |
|
||
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
misha mikem52Вы просто наверное не в курсе, что самая быстрая функция копирования - это именно CopyFile, особенно, по локальной сети (не CopyFileEx и не вручную по-блочно). CopyFile была выбрана из соображения скорости копирования. Вот не поленился, взял исходники Windows, и знаете, что я там нашел? Именно то, что и без исходников понятно любому нормальному человеку. \private\windows\base\client\fileopcr.c Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Оказывается, что ваша "мегабыстрая" CopyFile внутри невозбранно вызывает "тормознутую" CopyFileEx. Вот это поворот, не правда ли? Вполне возможно, что ТС, испытывая CopyFileEx, воткнул в нее тормозную LPPROGRESS_ROUTINE. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2017, 14:51:23 |
|
||
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
ЖышыВполне возможно, что ТС, испытывая CopyFileEx, воткнул в нее тормозную LPPROGRESS_ROUTINE. Это из какого места должны расти руки, что тормозным сделать проверку одного булевого флага? Ему ж, вроде, только возможность прерывания нужна, даже не контроль прогресса копирования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2017, 14:55:13 |
|
||
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
Вы, кстати, ради интереса сделаете простое приложение с вызовом Код: pascal 1. и Код: pascal 1. и замером времени их выполнения. И натравите его на какой-нибудь файл метров 300+ в локалке. Будете очень удивлены, особенно если у вас Windows 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2017, 17:41:10 |
|
||
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
alekcvpБудете очень удивлены, особенно если у вас Windows 10. Блин, откуда вы такие беретесь? Win10, сверху весь код CopyFileW, снизу начало CopyFileEx, для особо догадливых все важное выделено цветом. И чему мне удивляться? Тому, что после первого копирования файл банально закешируется и второе копирование будет выполнено мгновенно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2017, 18:10:43 |
|
||
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
alekcvpВы, кстати, ради интереса сделаете простое приложение с вызовом Код: pascal 1. и Код: pascal 1. и замером времени их выполнения. И натравите его на какой-нибудь файл метров 300+ в локалке. Будете очень удивлены, особенно если у вас Windows 10. misha mike... Блин, откуда вы такие беретесь? ... Меньше эмоций, больше тестов. Ну, кто первым тест прогонит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2017, 18:35:01 |
|
||
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
misha mikeЖышыВполне возможно, что ТС, испытывая CopyFileEx, воткнул в нее тормозную LPPROGRESS_ROUTINE. Это из какого места должны расти руки, что тормозным сделать проверку одного булевого флага? Ему ж, вроде, только возможность прерывания нужна, даже не контроль прогресса копирования. Это не булевский флаг, а коллбэк. И мы не знаем, что там ТС накодил. Видимо, что-то ужасное, не зря второй год мучается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2017, 18:36:44 |
|
||
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
чччДМеньше эмоций, больше тестов. Ну, кто первым тест прогонит? Вот тебе школьная загадка из разряда какой поезд придёт раньше. Есть две функции, А и Б. Функция А вызывает функцию Б а функция Б вызывает основный код. Вопрос: Какая функция выполниться быстрее, А или Б ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2017, 19:03:04 |
|
||
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
Няшик, тут одни люди утверждают, что одно быстрее другого, а другие возражают. По факту - голословно, и те и другие. Тесты и их результаты никто не представил. Кто-то на исходники вайна ссылается, кто-то вообще на исходники непонятно чего, кто-то - на конкретную версию Windows. Какой смысл спора, если есть одни лишь утверждения, но ни тестов, ни их результатов нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2017, 19:22:39 |
|
||
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
чччДКакой смысл спора, если есть одни лишь утверждения, но ни тестов, ни их результатов нет? Т.е. для уверенности, что 2*2=4 недостаточно знания таблицы умножения, нужно проводить масштабное тестирование? Я показал исходник Windows 2000 (да это он), проверил в отладчике живые Windows 7 и Windows 10, показал результат дизассемблирования. И нигде не нашел никаких причин, чтобы CopyFile работала быстрее CopyFileEx. В противовес мне выдвигаются какие-то голословные утверждения о том, что функция A, использующая в качестве реализации функцию B, должна быть быстрее ее прямого вызова. Предлагают сделать тест, который невозможно провести объективно в силу целого ряда факторов. Это форум программистов или двач какой-то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2017, 19:36:09 |
|
||
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
чччДНяшик, тут одни люди утверждают, что одно быстрее другого, а другие возражают. По факту - голословно, и те и другие. Тесты и их результаты никто не представил. Кто-то на исходники вайна ссылается, кто-то вообще на исходники непонятно чего, кто-то - на конкретную версию Windows. Какой смысл спора, если есть одни лишь утверждения, но ни тестов, ни их результатов нет? Это всё из за незнания. Во первых - есть заполнения стэка аргументов, +1 вызов Вот приведу пример, как 1 лишний вызов даёт просад в 1.2 % B: 0.007186 сек. A: 0.008768 сек. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2017, 19:45:25 |
|
||
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
чччДНяшик, тут одни люди утверждают, что одно быстрее другого, а другие возражают. По факту - голословно, и те и другие. Тесты и их результаты никто не представил. Кто-то на исходники вайна ссылается, кто-то вообще на исходники непонятно чего, кто-то - на конкретную версию Windows. Какой смысл спора, если есть одни лишь утверждения, но ни тестов, ни их результатов нет? Забыл оптимизацию включить! Тогда в 1.7 % B: 0.002759 сек. A: 0.004741 сек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2017, 19:47:12 |
|
||
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
Няшик, Тут всё хитрее. Сделал простейшее приложение: автор Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. Дома в локалке при копировании по сети с ноутбука - разница в пределах погрешности. Win 10 1703. На работе же у меня, то же самое приложение при копировании файла с файл-сервера показывало стабильную разницу в 15-20% в пользу CopyFile, причём при неоднократном запуске. Win 10 предыдущего релиза и комп на базе Core2Duo. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2017, 20:20:07 |
|
||
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
alekcvpНа работе же у меня, то же самое приложение при копировании файла с файл-сервера показывало стабильную разницу в 15-20% в пользу CopyFile, причём при неоднократном запуске. Win 10 предыдущего релиза и комп на базе Core2Duo. Зашибись. На параллельно нагруженном сервере в непонятно каких условиях что-то сработало быстрее. Вы не находите, что эта аргументация как-то слабо канает против объективной реальности, представленной кодом, который совершенно очевиден и к тому же как минимум 17 лет не менялся? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2017, 20:27:58 |
|
||
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
Тогда уж надо, для чистоты эксперимента, дефрагментировать диск-приемник, запустить CopyFile, замерить время, удалить полученную копию, перезагрузиться, запустить CopyFileEx, замерить время....и так несколько раз. Потом посчитать мат. ожидание, дисперсию, выкинуть из эксперимента "плохие" значения и тогда уже делать выводы))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2017, 20:36:14 |
|
||
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
alekcvpНяшик, Тут всё хитрее. Сделал простейшее приложение: автор Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. Дома в локалке при копировании по сети с ноутбука - разница в пределах погрешности. Win 10 1703. На работе же у меня, то же самое приложение при копировании файла с файл-сервера показывало стабильную разницу в 15-20% в пользу CopyFile, причём при неоднократном запуске. Win 10 предыдущего релиза и комп на базе Core2Duo. Ахахахах)) Ахахахах ХХАХАХАХххахахахаах)) Ой)) Я не могу)) Я под столом!! Ужасс - то какой... Теперь понятно чего это у него вторая функция быстрее))) !!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2017, 20:36:38 |
|
||
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
НяшикТеперь понятно чего это у него вторая функция быстрее))) !!!!Пост то читал? Там написано, что быстрее первая. Так что причины такой радости не ясны... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2017, 20:38:39 |
|
||
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2017, 20:40:43 |
|
||
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
Barmaley57НяшикТеперь понятно чего это у него вторая функция быстрее))) !!!!Пост то читал? Там написано, что быстрее первая. Так что причины такой радости не ясны... Да какая разница - то ??? Он использует GetTickCount который живёт своей жизнью! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2017, 20:42:36 |
|
||
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
Ну я надеюсь он более-менее адекватен, и подбирал файлы достаточного размера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2017, 20:43:24 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39471746&tid=2042151]: |
0ms |
get settings: |
6ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
362ms |
get topic data: |
9ms |
get forum data: |
4ms |
get page messages: |
77ms |
get tp. blocked users: |
2ms |
| others: | 192ms |
| total: | 673ms |

| 0 / 0 |
