Диалог копирования файла Windows: Почему оценка так… ПЛОХАЯ?

38

Предварительный расчет

XKCD

Я знаю, что диалоговое окно копирования Windows (в Windows XP) сначала сохраняет копию в памяти, и оно все еще копируется после закрытия диалогового окна, поэтому время выключено, но почему оценка времени, необходимого для создания копии так неточно, даже когда копирование памяти было отключено (в Vista и Windows 7)? Это кажется произвольным! Как работает вся процедура копирования, и почему Windows не может правильно оценить ее?

Максим Заславский
источник
Индикатор выполнения показывает количество завершенных файлов, а не% выполненного времени, к вашему сведению.
Фактор Мистик
3
Кроме того, это должно относиться к любой ОС, а не только к Windows, поскольку я считаю, что ограничения универсальны.
Заводная муза
1
Также следует отметить сообщение в блоге Марка Руссиновича: blogs.technet.com/b/markrussinovich/archive/2008/02/04/…
surfasb

Ответы:

29

Вкратце: плохие алгоритмы и скачкообразная оценка на самом деле являются слабостью реализации.

Другие инструменты, такие как TeraCopy, работают лучше. Я думаю, что не стоит объяснять, почему их реализация не является хорошей. Они это заметят и улучшат.

Что сложно:

  1. Вы должны учитывать колебания ресурсов (в основном, CPU / пропускная способность сети / скорость HDD)
  2. Вам нужно экстраполировать время, которое потребуется, прогнозируя поведение (то, что копия файла Windows окончательно делает плохо сейчас).
  3. Время от времени вносите коррективы в вашу первоначальную оценку (я имею в виду небольшие корректировки, не такие как на смешной картинке выше!)

Для этого играют роль не только количество байтов, но и количество создаваемых файлов. Если у вас есть миллион файлов по 1 КБ или тысячи файлов по 1 МБ, ситуация будет совершенно иной, поскольку у первого есть издержки на создание множества файлов. В зависимости от используемой файловой системы это может занять больше времени, чем фактическая передача данных.

Этот диалог сводил меня с ума также довольно много раз:

  • В более старой системе WinNT, если вам нужно было скопировать много маленьких файлов, она отображала имя и хорошую анимацию для каждого файла, замедляя весь процесс, чтобы практически невозможно было его использовать.

Современные средства копирования Windows не намного лучше:

  • Чтобы вычислить объем передаваемых данных, сначала необходимо выполнить поиск (что я и предполагаю), поэтому требуются годы, если вы выбираете много каталогов, пока он не начнет эффективно выполнять свою работу.
  • Некоторые встроенные тайм-ауты не позволяют скопировать большие файлы (> около 60 ГБ в моей системе). Беда в том, что он говорит вам, что после копирования уже более 30 ГБ по сети, и это теряется пропускная способность и время, потому что вы должны перезапустить с нуля!
  • По какой-то причине копирование файлов с одного компьютера на другой происходит очень медленно. (Я имею в виду, по сравнению с доступной пропускной способностью сети, с использованием других инструментов это быстрее, так что это не вычислительное ограничение.)
jdehaan
источник
Очень интересно!
Максим Заславский
48

Раймонд Чен однажды написал очень хорошую статью об этом. По сути, диалог просто угадывает :).

http://blogs.msdn.com/b/oldnewthing/archive/2004/01/06/47937.aspx

«Потому что диалоговое окно копирования просто догадывается. Оно не может предсказать будущее, но оно вынуждено попробовать. И в самом начале копии, когда очень мало истории, прогноз может быть очень плохим».

Вот аналогия: предположим, что кто-то говорит вам: «Я собираюсь сосчитать до 100, а вам нужно давать непрерывные оценки относительно того, когда я закончу». Они начинают «один, два, три ...». Вы замечаете, что они идут со скоростью примерно одно число в секунду, поэтому вы оцениваете 100 секунд. О-о, теперь они замедляются. «Четыре ... ... ... пять ... ... ...» Теперь вы должны изменить свою оценку, возможно, до 200 секунд. Теперь они ускоряются: «шесть-семь-восемь-девять» Вы должны обновить свою оценку снова.

Теперь кто-то, кто слушает только твои оценки, а не тот, кто считает, считает, что ты не в своем вкусе. Ваша оценка увеличилась с 100 до 200 секунд и до 50 секунд; в чем твоя проблема? Почему вы не можете дать хорошую оценку?

Копирование файлов это то же самое. Оболочка знает, сколько файлов и сколько байтов будет скопировано, но она не знает, насколько быстрым будет жесткий диск, сеть или Интернет, поэтому ей остается только догадываться. Если пропускная способность копирования изменяется, оценка должна измениться, чтобы учесть новую скорость передачи. "

RD
источник
8
Аналогию, которую он приводит, можно обобщить одним словом: статистика.
Surfasb
33

Я собираюсь сосчитать до десяти, 1....2....3....4сколько точек потребуется, чтобы добраться до 10?

5.6.7А сейчас? Принимаете ли вы во внимание все прошлые точки между числами и усредняете их, берете ли вы только последние 4 интервала и используете это среднее значение, вы только смотрите на последний интервал?

У вас та же проблема с передачей файлов. Скорость передачи файла не постоянна, она увеличивается и замедляется в зависимости от множества факторов. Причина, по которой число так много скачет, заключается в том, что Microsoft склоняется к стороне спектра «только считай последний интервал».

В этой стороне спектра нет ничего плохого, она дает вам более точные «секунды в секунду» (одна секунда в реальном времени приводит к снижению счетчика на одну секунду), но это заставляет общее ETA таймера сильно перепрыгивать ,

Хорошим примером противоположной стороны является 7-Zip, когда он сжимается. Если скорость сжатия падает в процессе обработки, вы можете видеть, что ETA не скачет резко, как ETA передачи файлов, но может пройти от 2 до 3 реальных секунд, прежде чем таймер сработает за одну секунду (или даже может начать отсчет ) пока не стабилизируется на новой скорости.

Скотт Чемберлен
источник
2
Бьет меня, почему они не делали экспоненциальную или регулярную скользящую среднюю ...
Mehrdad
@ Mehrdad Я думаю, что в более поздних версиях Windows время ETA ведет себя намного больше, чем 7zip в Windows 7 и новее.
Скотт Чемберлен
15

На самом деле, по словам WAAAAAY, Рэймонд Чен из Microsoft почти канонически ответил на этот вопрос, и в этой загадке есть несколько частей.

Потому что диалог копирования просто угадывает. Он не может предсказать будущее, но вынужден пытаться. И в самом начале копии, когда истории очень мало, прогноз может быть очень плохим.

Во-первых, об этом говорит Windows. Он знает, сколько файлов и насколько они велики, но скорость передачи на файл сильно варьируется. В некоторых случаях это зависит от таких вещей, как размер или расположение диска. С течением времени он корректирует свои предположения исходя из текущих и прошлых условий, и поэтому вы получаете неточные расчетные скорости передачи в реальных условиях.

Подмастерье Компьютерщик
источник
Интересно, что первый комментарий в 2004 году описывает подробное раскрывающееся раскрытие информации о копировании файла, показывающее оставшиеся байты, которые не были представлены до 2006 года в Vista.
Скотт Чемберлен
2
Да, кто-то в чате тоже на это указывал. Я испытываю соблазн сказать, что это решает проблему пользователя, смотрящего на время до завершения, предоставляя ему красочные графики, на которые можно смотреть вместо этого :)
Journeyman Geek
@JourneymanGeek "кто-то в чате" сообщает! Да, хотя это довольно авторитетный источник, важно иметь в виду, что он с 2004 года, и он сильно устарел и, вероятно, лишь слабо связан с текущими алгоритмами, используемыми в Windows 8.
Боб,
1
Вот сообщение в блоге по Windows 8: «Оценить оставшееся время для завершения копирования практически невозможно с какой-либо точностью ... Вместо того, чтобы тратить много времени на подготовку оценки с низкой достоверностью, которая была бы лишь немного улучшена» поверх текущей мы сосредоточились на представлении информации, в которой были уверены ... »
Келли Томас
12

Вот объяснение по Raymond Chen , главный инженер - программист Проектирование в Microsoft:

Почему диалог копирования дает такие ужасные оценки?

Потому что диалог копирования просто угадывает. Он не может предсказать будущее, но вынужден пытаться. И в самом начале копии, когда истории очень мало, прогноз может быть очень плохим.

Вот аналогия: предположим, что кто-то говорит вам: «Я собираюсь сосчитать до 100, а вам нужно давать непрерывные оценки относительно того, когда я закончу». Они начинают «один, два, три ...». Вы замечаете, что они идут со скоростью примерно одно число в секунду, поэтому вы оцениваете 100 секунд. О-о, теперь они замедляются. «Четыре ... ... ... пять ... ... ...» Теперь вы должны изменить свою оценку, возможно, до 200 секунд. Теперь они ускоряются: «шесть-семь-восемь-девять» Вы должны обновить свою оценку снова.

В сообщении, приведенном выше, подробно обсуждается этот вопрос с некоторыми интересными комментариями.

Рэймонд Чен - легендарный человек, «Чак Норрис» от Microsoft, я не думаю, что вы получите более авторитетный ответ. Я уверен, что он, по крайней мере, видел рассматриваемый код.

haimg
источник
9

Очевидная причина заключается в том, что скорость передачи меняется со временем, равно как и среднее значение, а также прогноз. Чтобы объяснить это нетехническому другу, я использовал аналогию, связанную с путешествием по воздуху. Вы собираетесь лететь над Атлантикой. Когда вы прибываете на такси в аэропорту вылета, ваш ETA составляет около двух месяцев. Когда вы высадитесь в аэропорту прибытия, исходя из вашей средней скорости, вы достигнете дома вашего друга через 5 секунд.

Но вы должны понимать, насколько сильно скорость может варьироваться, даже с тем, что кажется предсказуемым сценарием, таким как копирование файлов на одном диске или между двумя локальными дисками. Одна из новых функций, которые мне нравятся в Windows 8, - это возможность отображать скорость с течением времени, если вы нажмете «подробнее». Если у вас нет доступа к компьютеру с Windows 8, найдите множество примеров в диалоговом окне копирования изображений для Windows 8 . Многие из них довольно плоские, но многие из них также беспорядочно неровные, и вы задаетесь вопросом, действительно ли жесткий диск здоров, когда он падает до нуля.

Некоторые из этих ударов, вероятно, связаны с различиями в размере файла - меньшие поля дают больший доступ, что замедляет работу, особенно на механическом жестком диске, который нужно искать, перемещая головку чтения, - но некоторые могут быть просто дешевым диском, который глохнет при малейшем прикосновении, чтобы не повредить пластины.

Существуют лучшие и худшие алгоритмы прогнозирования ETA, но для точного прогнозирования компьютер должен быть общеизвестным. Риск попытки сделать алгоритм «умным» состоит в том, что он может создавать новые, непредвиденные случаи, когда он еще более забавно ошибается.

Windows 8 копировать диалог

Windows 8 копировать диалог 2

nitro2k01
источник
4

Единственный способ узнать, сколько времени потребуется, чтобы сжать набор файлов, - это сжать их. Иногда предположение Windows близко, иногда оно совершенно неверно. То же самое верно и для копирования большого количества файлов, как я уверен, вы заметили.

Это не столько ошибка, сколько бесполезное отображение редко точной информации. Лучший способ исправить это - закрыть глаза. Игнорируй это. ;-)

Возможно, есть программа, которая может копировать / сжимать файлы и издавать звуковой сигнал по окончании. Это было бы действительно полезно. Мы могли бы немного вздремнуть, пока мы ждем, пока Windows закончит уборку.

Стив Риндсберг
источник
4

Я думаю, что причина была хорошо объяснена в одном из комментариев к сообщению в блоге, связанном с ответом Роальда:

У него ужасный алгоритм оценки. Нет оправданий. Если ему нужно скопировать 1000 файлов по 1 КБ и 10 файлов по 1 МБ, он думает, что он будет так же занят с файлом 1 МБ, как и с файлами 1 КБ.

Причина, по которой он дает такие ужасные оценки, состоит в том, что это не очень хорошо сделано. Очевидно, что он никогда не может быть на 100% точным, но это может быть намного лучше.

Томас Бонини
источник
1
Знание размера файла в Windows требует его открытия, а открытие файла в Windows означает его чтение. И вместо того, чтобы открыть все файлы, чтобы увидеть, насколько они велики, чтобы получить точную оценку того, сколько времени займет копирование, Windows решает использовать свое время для фактического копирования файлов - в конце концов, именно это вы и просили сделать.
SecurityMatt
1
@SecurityMatt: Если бы это было так, понадобилось бы много времени, чтобы получить список каталогов. Я уверен, что размеры файлов хранятся в каталоге и обновляются при каждом изменении файла. Следовательно, должен быть способ получить быструю и достаточно точную оценку времени копирования на основе размеров файлов, указанных в каталоге, и некоторых предположений о скорости передачи. Действительно умная ОС будет обращать внимание на среднюю скорость передачи по времени и использовать ее в своих оценках.
RobH
4

Чтобы ускорить процесс копирования (не тратить слишком много времени на вычисление оценок времени вместо выполнения операций, связанных с копированием), встроенная в Проводник утилита копирования Windows поддерживает ограниченный объем информации о том, как быстро выполнялись предыдущие операции записи. Каждый раз, когда ему нужно вычислить оставшееся время, он просто вычисляет среднее количество операций записи, которое заняло время, а затем умножается на количество оставшихся операций записи.

Проблема заключается в том, что время, необходимое для выполнения операции записи, не является постоянным - оно может значительно отличаться. Так что это, в свою очередь, приводит к значительным изменениям в оценке времени.

Брайан Градин
источник
Я не думаю, что вы в этом правы - вы можете поддерживать среднее значение для записей, используя только 2 числа - текущее среднее [ A] и количество точек данных, использованных для получения этого среднего [ n]. Затем, чтобы обновить его, это просто случай (A*n + [New value])/[n+1]. Кроме того, поскольку операции копирования почти всегда связаны с вводом-выводом, а не с процессором, простые вычисления, подобные этим каждые несколько секунд, ничего не значат. С другой стороны, для сохранения среднего значения последних записей nтребуется массив / очередь / стек nэлементов - чтобы вы знали, какое значение должно быть исключено.
Основное
Хорошая точка зрения! Так какого черта это так повсеместно? : P
Брайан Градин
Я предполагаю, что они пытались быть умными, делая более отзывчивое среднее, принимая во внимание только последние несколько записей - и выбрали слишком мало. Тем не менее, у меня нет источника, так что, кто знает?
Основное
4

Есть 3 фактора, которые необходимо учитывать:

  1. Общий размер перевода.
  2. Количество файлов для передачи.
  3. «Занятость» СМИ и, возможно, связь.

Числа 1 и 3, по-видимому, оказывают наиболее очевидное влияние на вычисление времени передачи, но многие люди не учитывают число 2. Это может оказать огромное влияние на продолжительность переноса, и его трудно определить количественно.

По сути, каждый раз, когда файл записывается, файловая система должна записать немного метаданных о файле, например. владение, права доступа, время создания / изменения / доступа и т. д. В зависимости от конкретной файловой системы эта информация может быть записана на часть диска, расположенную очень «далеко» от места записи файла. Эти накладные расходы на файловую систему могут привести к тому, что, казалось бы, простая передача займет много времени и / или приведет к значительным колебаниям оценки времени.

Например: при переносе одного большого файла вы заметите, что оценка остается стабильной и достаточно точной, но при передаче сотен файлов разных размеров, но одинакового общего размера, может потребоваться больше времени, что приведет к подгонке оценки времени.

Sammitch
источник
4

В современных алгоритмах оценки есть три недостатка.

Вопреки распространенному мнению, они не достаточно сложны, чтобы перевернуть руки вверх.

Причина, по которой большинство людей пишут блоги, а люди здесь не знают о такой возможности, настолько хороша, насколько я могу судить, из-за области обучения и широты обучения. Скромное, но в то же время очень удобное средство должно быть возможно для [выпускника с более недавним обучением, чем авторы блогов] [многомиллиардной компании] Microsoft.

Я попытаюсь примерно объяснить, почему.


Точки отказа следующие. Ядро:

1. не может надежно предсказать будущую загрузку ввода-вывода из-за обстоятельств, выходящих за рамки ядра

  • с этим ничего нельзя поделать, так как это очень неограниченная проблема P = NP.

2. не отслеживает эвристику ввода-вывода на каком-либо полезном уровне детализации. Использование - гораздо более широкое понятие, чем скорость чтения / записи диска / сети .

  • очень мало нужно сделать для этого, чуть больше, чем отслеживать основную информацию об использовании ввода-вывода

    • с диска
      • средняя скорость чтения размерности 1а
      • средняя скорость записи файлов размерностью 2а
    • на основе кванта * в соответствии с
      • размер файла размер б
      • расположение файла на диске c размером
    • * Квантован на [вероятно] не более 3 категорий. Уменьшение размерности помогло бы нам определить наверняка, но 3 должно быть достаточно для (вероятно, довольно эффективного) механизма прогнозирования лучше, чем ничего:
      • размер файла
        • легкий
        • средний
        • тяжелый
      • местоположение [сообщает о задержке поиска]
        • начало
        • средний
        • ты понял
      • размер и местоположение файла избыточны / перекрываются со скоростью чтения / записи, это преднамеренно
    • мы должны знать , как «занят» диск был так , что мы можем предположить , что это будет продолжаться в том , что занят размерности г
      • рассчитывается по количеству читаемых файлов, свернутых с их весами
      • используется для оценки времени в начале копирования ... диалоговое окно на основе ожидаемой будущей нагрузки, если все остальное, кроме этого диалогового окна копирования, продолжается, как сейчас
    • метод записи для целей ... здесь патентоспособности

3. если бы они отслеживались , не использовались бы для эвристики

  • мало что было сделано здесь, где мы делаем большую часть работы
  • это где мы помещаем данные из # 2, чтобы использовать
    • грубый статистический анализ веса и местоположения файлов, чтобы определить, сколько прыжков мы собираемся сделать. Вес + местоположение дает нам прогноз
    • в сочетании с текущими весами и местоположениями нагрузки на диск
    • оценить то, что мы думаем, средняя скорость чтения / записи для числа файлов размерности F будет
    • который мы сравниваем, чтобы тонко настроить нашу модель
    • что позволит нам достаточно точно оценить индикатор выполнения и время до завершения
  • метод анализа для целей прогнозирования ... здесь патентоспособности

Смысл всего этого в том, что наша модель только 2a = F * (bxc) + d комплекс

Где a, b и c имеют по 3 состояния в каждом: файловый менеджер просматривает файлы (или только метаданные) перед копированием, а F * (bxc) + d не является дорогостоящим вычислением; если вы хотите что-то более точное, используйте справочную таблицу с большим количеством состояний.

примечание: размеры здесь для диска, будут отличаться от SSD - начало / середина / конец не имеет значения

Одним из ключевых различий между тем, что я описал, и предыдущими реализациями, которые мы видели до сих пор, было бы, вкратце, наблюдение за размером файла и нарушением / энтропией файла на диске и его использование для [более] точного учета временного элемента использования диска.

(патент оставлен в качестве упражнения для читателя ...)

paIncrease
источник
@ Твисти, я закончила, как теперь?
Увеличение
Намного лучше. Удачи в использовании сайта и спасибо за присоединение к сообществу.
Я говорю Восстановить Монику
3

Есть много «неизвестных» переменных, когда вы пытаетесь предсказать, сколько времени займет что-то. Например, если программа знает, что существует 3500 файлов, и что файлы имеют размер 3,5 ГБ (3500 МБ), означает ли это, что каждый файл равен 1 МБ? Не обязательно. Там может быть много файлов по 4 КБ, много файлов по 100 МБ и некоторые другие между ними. Кроме того, вы должны принять во внимание, откуда приходят файлы и куда они отправляются (например, медиа). Какое самое большое узкое место? Как вы пытаетесь копировать файлы с жесткого диска через VPN- туннель? Вы даете лучший сценарий, а затем настраиваете свои счетчики в режиме реального времени. Вот почему вы видите, как эти индикаторы прогресса меняются на лету.

JSanchez
источник
2

Математически правильная модель состоит в том, чтобы фактически выполнить наивное усреднение и экстраполяцию:

transfer speed = data copied / time elapsed
time remaining = data remaining / transfer speed

Причина в том, что по закону больших чисел локальные колебания будут компенсировать усредненную скорость передачи , и это даст вам наиболее стабильный результат.

Кажется, что Microsoft делает, чтобы вычислить скорость передачи в самый последний период времени. Это означает, что каждое локальное колебание значительно меняет результат.

ybungalobill
источник
2
Ваша модель не будет правильно обрабатывать продолжительные помехи, такие как параллельная передача других файлов, и будет продолжать говорить мне, что это займет всего 5 минут, даже если тот же объем данных занял 20 минут. Взвешенное скользящее среднее может быть более точным.
Даниэль Бек
@DanielBeck: не совсем правильно. Ожидаемое время будет постепенно увеличиваться. Вопрос в том, насколько быстро он увеличится? Ну, это зависит от прошедшего времени. Если это была длительная операция, например, она уже копировалась в течение 5 часов, это не сильно увеличило бы ожидания. Но имеет ли значение 15-минутная погрешность для 5-часовой работы? Нет. Дело в том, что это дает вам наилучшее приближение с точки зрения относительной ошибки. Также вы не можете сделать что-то, что будет работать намного лучше в каждом сценарии.
ybungalobill
2
Проблема вашей модели в том, что она абсолютно не реагирует на изменения скорости передачи в середине передачи. Это будет столь же невыносимо, как и быстро реагирующая передача файлов Windows Пример : передача 60 ГБ при скорости 10 МБ / с. Оставшееся время до начала: 100 минут. Передача 54 ГБ и падение до 2 МБ / с. Через 90 минут: расчетное время, оставшееся до 54 ГБ: 10 минут. Реальное время осталось на 54 ГБ: 50 минут. Через 115 минут : расчетное время, оставшееся до 57 ГБ: 6 минут. Реальное время осталось на 57 ГБ: 25 минут. Через 131,67 минуты : расчетное время, оставшееся до 59 ГБ: 2,23 минуты. Реальное время осталось на 59 ГБ: 8,33 минуты.
Даниэль Бек
@DanielBeck: вся передача длится 150 минут, поэтому максимальная относительная ошибка составляет 50% в начале передачи, когда вы не можете сделать лучше. На 54-м ГБ это всего ~ 14% от общего объема. (если это займет у вас 150 минут, почему 20 минут имеют значение?) На самом деле очень хорошая оценка ... Тем не менее, я понимаю вашу точку зрения. Способ улучшить это - не взвешенное скользящее среднее, потому что вы не можете знать, каким должен быть размер окна (ожидается, что эта операция займет минуты, как копирование файла,
ybungalobill
или часы через протокол обмена файлами p2p, где вы получаете 10 минут 10 МБ / с и 10 минут 0 МБ / с). Способ улучшить это - взять среднее взвешенное по времени, а не по размеру.
ybungalobill
1
There is some way to refine or correct this kind of "bug"?

Как сказал Роальд ван Доорн, это просто предположение. Конечно, это не значит, что он не может быть лучшим догадкой. Есть много эвристик, которые могут быть использованы для расчета этого.

  1. Лучший, самый дорогой способ - сохранить историю предыдущих «копий», а затем использовать алгоритмы искусственного интеллекта для вычисления догадки.
  2. Можно построить формулу, основанную на исследовании того, сколько времени это займет. Они могут принимать во внимание такие вещи, как: файловая система, количество файлов, размер файлов, время поиска на диске, скорость чтения / записи на диске, расположение файлов на диске (фрагментация), текущее использование диска.
  3. Сочетание двух. То есть. сделайте несколько тестов, чтобы узнать, сколько времени займет выполнение определенных операций, а затем используйте их в качестве истории для простых формул.

Очевидно, что все это легко реализовать ... и я упомянул только копии файлов. Аналогичная работа должна быть сделана для всех видов переводов.
Вопрос, который вы должны задать себе. Вы бы предпочли, чтобы Microsoft потратила время на то, чтобы дать вам более точную оценку, или вы бы предпочли, чтобы ваши файлы быстрее передавались.

Однако, если вы сжимаете что-то с помощью 7-zip, вы заметите, что это намного лучше, чем угадывать, чем Windows. Я сомневаюсь, что он делает что-то сложное, просто немного лучше догадывается.

user606723
источник
1

Короче говоря, расчет основан на текущей скорости передачи .

Например: если ваша скорость передачи падает из-за того, что Windows вынуждена копировать огромное количество крошечных файлов, ожидаемое время увеличивается линейно, и наоборот для больших файлов.

Почти невозможно предсказать, какой будет скорость передачи в течение всего процесса передачи, поскольку она зависит от множества факторов, таких как размер файла, загрузка процессора, ошибки передачи и т. Д.

klingt.net
источник
1

В блоге MSDN есть несколько интересных ответов. Совершенствуем основы управления файлами: об этом копируйте, перемещайте, переименовывайте и удаляйте . Что касается того, почему это трудно:

Оценить время, оставшееся до завершения копирования, практически невозможно с какой-либо точностью, потому что здесь задействовано много непредсказуемых и неконтролируемых переменных - например, какая пропускная способность сети будет доступна для длины задания копирования? Будет ли ваше антивирусное программное обеспечение раскручиваться и запускать сканирование файлов? Нужно ли другому приложению доступ к жесткому диску? Будет ли пользователь запускать другую работу копирования?

И как они улучшаются,

Вместо того, чтобы тратить много времени на подготовку оценки низкой достоверности, которая будет незначительно улучшена по сравнению с текущей, мы сосредоточились на том, чтобы представить информацию, в которой мы уверены, полезным и убедительным образом. Это делает наиболее надежную информацию, которую мы имеем для вас, чтобы вы могли принимать более обоснованные решения.

Тем не менее, если вы действительно хотите улучшить только данную оценку и сохранить индикатор выполнения таким, какой он есть, вы можете сделать что-то, предложенное в комментарии Slashdot :

Ведение таблицы ожидаемых скоростей для каждого устройства хранения в файловой системе. Запишите, сколько времени занимает чтение информации файловой системы. Когда устройство установлено, если это целесообразно для типа устройства, ищите середину и конец, также измеряя скорости там. Получите приблизительные кривые для скоростей чтения и записи в разных местах и ​​используйте их для будущих оценок. Для будущих операций чтения и записи обратите внимание на то, где они находятся и как быстро они идут, и соответствующим образом скорректируйте кривые.

Когда операция начинается, посмотрите на кривые для ввода и вывода для соответствующих устройств. Найти ожидаемую скорость для целевого местоположения. Для оценки следует использовать любую скорость ниже.

эйс
источник
1

Просто хотел добавить, что общее количество файлов - это самый трудоемкий фактор операций копирования файлов на ПК. Я всегда помню, как в молодости я умышленно вызывал сбой ПК в своем компьютерном классе, начиная с 1 файла без содержимого и копируя его, затем выбирая 2 файла и снова копируя и так далее. Как только он получил около 1024 файлов, ему потребовалось огромное количество времени, чтобы что-то сделать, даже если он не копировал никакой информации, кроме как для заголовка файла. Попробуйте сами даже на новой ОС, экспоненциальной копии файла, и вы увидите, что произойдет. Пища для размышлений.

Daft Gowk
источник
Хотя интересно, это не отвечает на вопрос. Прочитайте, как ответить, прежде чем ответить.
Пользователь 99572 в порядке
0

Я только что скопировал 200 ГБ с жесткого диска USB на мой основной диск. Было около 130000 файлов

После первых 4-5 минут я заметил, что:

  • Для самых маленьких файлов скорость составляла около 100 файлов в секунду со скоростью около 600 КБ / с.
  • И для больших файлов это было как 70 МБ / с

В начале окна изменили оценку с 1 часа на 5+ часов, затем обратно на 1 час и так далее. В конце, как и в 95%, он все еще менял оценку с 10 минут до 10+ часов. Так что вместо того, чтобы стать более точным, оно становилось все менее и менее точным.

Простые математические шоу:

130 000 файлов со скоростью 100 файлов в секунду = 22 минуты

200 000 МБ при 70 МБ в секунду = 47 минут

22 минуты - потеря времени на копирование файлов размером в несколько килобайт. 47 минут - время, необходимое для передачи фактических данных, если время поиска отсутствует.

Сумма 22 минут + 47 минут - это абсолютное максимальное время, которое это может занять.

Поэтому очевидно, что оценка должна быть где-то между 47 и 69 минутами.

Диалоговое окно показывает примерно 90%: «Я копирую несколько маленьких файлов со скоростью 1 МБ / с, данных больше на 20 ГБ, для завершения потребуется 5:30 часов.

Несколько секунд спустя: «Я копирую большой файл здесь, на скорости 70 Мбит / с это займет 4 минуты.

Что на самом деле видит человек из того же диалога: 120 000 файлов и 180 ГБ уже скопированы за 40 минут. Остальные 10000 файлов и 20 ГБ должны занять около 5 минут

Диалог дает достаточно информации, чтобы сделать расчет, который становится все более и более точным каждую секунду. Он знает скорость, с которой копируются небольшие файлы. Он знает, с какой скоростью копируются большие файлы. Он также знает, сколько файлов и сколько байтов осталось.

Так просто сделать такое предположение, просто установив верхний и нижний пределы.

Диалог показывает немного более корректные данные только в случае, когда большие файлы находятся перед маленькими файлами. Если это так, он начинается через 40 минут, а через 30 минут начинает копировать небольшие файлы и говорит: «Ну, мне нужно еще 20 минут».

Но когда маленькие файлы в начале и большие файлы в конце. Диалог фактически не заботится о том, какие «файлы в секунду» он передает мелким файлам. Это делает его вычисление так, как будто количество маленьких файлов равно бесконечности, и что они всегда будут маленькими.

Xizario
источник
Это на самом деле не отвечает на вопрос.
Дэвид Постилл
Это на самом деле отвечает, если вы внимательно читаете. Это два типа плохой оценки, и я объяснил, почему они происходят с точки зрения обратного инжиниринга на основе примера.
Xizario