|
|
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, У меня есть простейший поток cpyThread, который просто вызывает WinApi.Windows.CopyFile для копирования файла и больше ничего не делает. Я хочу прервать копирование, т.е. убить поток копирования cpyThread. Делаю это вот так: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. Проблемы 2 шт: 1) поток убивается несколько минут (далеко не сразу) и на одной из операций "зависает" 2) файл в конечной папке (куда копируется) остается заблокированным даже на чтение. Надо чтобы поток завершился быстро, закончились операции чтения-записи на диск, и самое главное, чтобы поток "отпустил файл". Как корректно и быстро завершить поток, копирующий файл? Прошу использование CopyFileEx не предлагать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2017, 19:57:01 |
|
||
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
m52Прошу использование CopyFileEx не предлагать. Тогда Вам на форум проктостоматологов. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2017, 20:00:21 |
|
||
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
m52 Как корректно и быстро завершить поток, копирующий файл? Никак. Корректно поток может завершиться только по собственной инициативе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2017, 20:04:09 |
|
||
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
Ладно, тогда такой вопрос: как безопасно убить поток? Ведь понятно, что CopyFile невозможно иначе никак прервать. Поэтому я решил обернуть ее в отдельный поток и попытаться убить поток в случае отмены. Или может подскажете другую идею, как еще можно прервать работу функции CopyFile? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2017, 20:09:49 |
|
||
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
m52, в native поток нельзя убить безопасно. Только процесс. Убийство же потока приведёт к гигантской утечке памяти, а равно как имеет ненулевой шанс подвесить процесс. Используйте средства, позволяющие прервать операцию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2017, 22:36:19 |
|
||
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
GunSmokerУбийство же потока приведёт к гигантской утечке памяти На размер стека потока или еще на что-то ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2017, 22:41:39 |
|
||
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
m52Или может подскажете другую идею, как еще можно прервать работу функции CopyFile?Заменть ее на CopyFileEx, которую прервать можно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2017, 23:31:30 |
|
||
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
А, если "Ex не предлогать" - Thread.Free - ваш выбор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2017, 23:35:13 |
|
||
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
m52, вынеси операцию копирования в отдельный процесс, не в поток. Это не больно. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2017, 23:42:14 |
|
||
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
m52, если так боитесь CopyFileEx, то сделайте свой цикл копирования в потоке и прерывайте его когда угодно по флагу Terminated. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2017, 01:08:49 |
|
||
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
misha mike, ты что, нельзя. Коллега уже больше года с мировой энтропией в этом направлении борется: http://www.sql.ru/forum/1211768/preryvanie-copyfile-ili-korrektnoe-ubiystvo-potoka ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2017, 02:43:57 |
|
||
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
Чего - то смотрю и вижу дичь, глаза на жопе и руки на лице - фейспалмом прикрывают всё это дело. Стандартный CreateFile + SetFilePointer + ReadFile открывают файл 150 мб за долю секунды грузя в память. Если надо быстрее, то используйте NTFS копирование. Но это явно не для ТС ибо хард поламает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2017, 15:03:12 |
|
||
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
Поползал в интернете и нашёл Исходную функцию CopyFileW Использует CopyFileExW А там стандартный CreateFileW + ReadFile как я и писал выше (Опыт позволил сказать как она работает) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2017, 16:06:58 |
|
||
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
Наверное делать копирование ручками через overlapped операции. Прерывать можно через APC при ожидании, например, на WaitForMultipleObjectsEx. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2017, 16:45:13 |
|
||
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
m52, Можно обернуть поток в while..do, в условии поставить флаг и ждать либо естественного завершения жизни потока, либо окончания условия в while. з.ы. задай FreeOnTerminate=false, раз уж ты используешь FreeAndNil и оберни это все в try..finally з.ы.2 лучше сделай этот поток дополнительным и копируй файлы в OnExecute этого потока. Тогда и прибить поток сможешь в любой момент. А так ты смешал мух с котлетами ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2017, 01:38:08 |
|
||
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
Док, нет. У него в потоке долговременная синхртнная операция, которой начхать на все флаги и while. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2017, 01:49:41 |
|
||
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
чччДДок, нет вона оно че, Михалыч. А я с телефона и не разглядел ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2017, 10:43:43 |
|
||
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, спасибо за комменты, поток все таки убивается, хотя и с задержкой. Убивать поток придется редко, только если юзер отменяет операцию. Но бывает (крайне редко), что с флешки файл не читается и программа впадает в бесконечность ... И тут только снятие задачи через диспетчер задач поможет. Даже поток не прибить. Всем спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2017, 19:14:49 |
|
||
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
Просто удивительное стремление сделать через ж... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.06.2017, 19:20:55 |
|
||
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
misha mike , Вы просто наверное не в курсе, что самая быстрая функция копирования - это именно CopyFile, особенно, по локальной сети (не CopyFileEx и не вручную по-блочно). CopyFile была выбрана из соображения скорости копирования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2017, 08:52:40 |
|
||
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
m52misha mike , Вы просто наверное не в курсе, что самая быстрая функция копирования - это именно CopyFile, особенно, по локальной сети (не CopyFileEx и не вручную по-блочно). CopyFile была выбрана из соображения скорости копирования. Да нет. Просто ты у нас тут местный д*р*чёк. Я уже написал как она работает, и даже сорцы дал. А ты гнёшь своё 20556671 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2017, 09:17:04 |
|
||
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
Няшикm52misha mike , Вы просто наверное не в курсе, что самая быстрая функция копирования - это именно CopyFile, особенно, по локальной сети (не CopyFileEx и не вручную по-блочно). CopyFile была выбрана из соображения скорости копирования. Да нет. Просто ты у нас тут местный д*р*чёк. Я уже написал как она работает, и даже сорцы дал. А ты гнёшь своё 20556671 А с чего ты взял, что реализация методов вайна совпадает с реализацией методов винды? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2017, 12:27:36 |
|
||
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
m52Вы просто наверное не в курсе, что самая быстрая функция копирования - это именно CopyFile, особенно, по локальной сети (не CopyFileEx и не вручную по-блочно). CopyFile была выбрана из соображения скорости копирования. Работа с диском (сетью) -- это всегда работа с диском (сетью) и никаких чудес тут не бывает. Думаете эта функция волшебная? Единственный способ заметно ускорить копирование -- совместить во времени чтение следующего блока из источника с записью предыдущего блока на назначение. Это ускорит процесс при условии, что источник и назначение -- не одно устройство, и они не находятся за общим узким каналом связи. Неужели так трудно реализовать этот простой алгоритм и нужно плодить говнософт, который киляет активные потоки и оставляет заблокированные файлы в системе? Вы с выбором профессии не ошиблись? Кстати, помнится, по бенчмаркам плагин bcopy для FAR Manager даже несколько быстрее, чем CopyFile. Вот где настоящая магия! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2017, 12:59:25 |
|
||
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
чччДНяшикпропущено... Да нет. Просто ты у нас тут местный д*р*чёк. Я уже написал как она работает, и даже сорцы дал. А ты гнёшь своё 20556671 А с чего ты взял, что реализация методов вайна совпадает с реализацией методов винды? Не думаю что, там будут слишком разные алгоритмы копирования. Майки ведь не пишут на каждую функции какие - то ново выдуманные функции. У них есть свой API и над этим API строят ряд других функций названных API ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2017, 13:24:58 |
|
||
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
Няшик, ничем не обоснованные фантазии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2017, 13:31:09 |
|
||
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#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 |
|
||
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
rgreatНу я надеюсь он более-менее адекватен, и подбирал файлы достаточного размера. Ну если они будут мерить такими не точными способами, то у них вряд - ли получится точно замерить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2017, 21:02:44 |
|
||
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
Barmaley57Пост то читал? Там написано, что быстрее первая. Так что причины такой радости не ясны... Любой, кто скажет, что в этом конкретном тесте у него первая ф-ция сработала быстрее, или врет (сразу по двум причинам), или не учитывает фоновой активности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2017, 21:05:58 |
|
||
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
Запасаюсь попкорном. В свое время небезызвестный оптимизатор шаманил с флагами CreateFile и размером буфера при копировании. "смысла в этих попытках столько же, сколько в тщательном измерении длины шага мерина, которого ведут на живодерню" (с) Виктор Конецкий ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2017, 21:41:38 |
|
||
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
Если и "тестить", то 100+ раз скопировать файл попеременно 2-мя методами. Так это хоть статистически не бессмысленно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2017, 21:52:57 |
|
||
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
rgreatЕсли и "тестить", то 100+ раз скопировать файл попеременно 2-мя методами. Так это хоть статистически не бессмысленно. А смысл вызывать функцию А которая в конечном итоге вызовет функцию Б ?))) По моему, от того что функцию Б вызвала функция А не станет быстрее работать.! Это маразм не понимающих людей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2017, 22:04:11 |
|
||
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
Няшик, Ну тут некоторые хотят странного. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2017, 22:08:42 |
|
||
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
НяшикДа какая разница - то ??? Он использует GetTickCount который живёт своей жизнью! У GetTickCount погрешность ~30 мс, этого (внезапно) за глаза хватает при измерении интервалов порядка 5 секунд, ваш Кэп. rgreatЧто в общем тоже понятно почему может быть. :) В данном случае речь идёт про копирование по сети. К тому же в любом случае, кэширование должно ускорять чтение/запись во *второй* раз, а не в первый, поэтому я специально CopyFileEx поставил на второе место (читай: в более выгодные условия). Если этот пример заставить копировать файл с диска на диск, то там вторая функция, за счёт кэширования, на порядок быстрее выполняется. НяшикНу если они будут мерить такими не точными способами, то у них вряд - ли получится точно замерить. Разницу между 3800мс и 4600мс на погрешности GetTickCount списать затруднительно. Фоновые процессы отсеиваются запуском теста ~10 раз (все 10 раз они в одни ворота играют?). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2017, 22:10:34 |
|
||
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
alekcvp, Кэширование НА ЗАПИСЬ может замедлять 2-е копирование. Причем значительно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2017, 22:17:44 |
|
||
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
alekcvpУ GetTickCount погрешность ~30 мс Вообще, обычно, около 15, но при запущеной дельфе... 1 мсек. т.к. дельфя, а точнее VTV который она использует, выставляет timeBeginPeriod(1). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2017, 22:40:50 |
|
||
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
Ну раз речь заходит о тестировании скорости! Так что лучше использовать более качественные средства замера работы кода. Иначе какой толк замерять конус по окружности пластмассовой линейкой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2017, 22:49:56 |
|
||
|
Как правильно "прибить" копирующий поток?
|
|||
|---|---|---|---|
|
#18+
alekcvpВ данном случае речь идёт про копирование по сети. Это неоднозначные факторы. Во первых влияет - скорость передачи по сети (Отдача приём на двух приёмниках, и их загруженность) Так же, запись на диск и считывание. И представьте, вызывается в конце функция Б из А ... Т.е один и тот же код, в двух случаях. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2017, 22:53:04 |
|
||
|
|

start [/forum/topic.php?all=1&fid=58&tid=2042151]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
149ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
86ms |
get tp. blocked users: |
1ms |
| others: | 204ms |
| total: | 473ms |

| 0 / 0 |
