Вычисления оцененных времен файла копируют / перемещения?

Ни один из этих ответов не помог мне, но я нашел решение.
У меня был веб-проект, используемый в Wildfly 8.2, построенный с Maven, для source и target было установлено значение 1.8 на maven-compiler-plugin, а все настройки Eclipse и Maven были установлены на Java 1.8. Проблема состояла в том, что Wildfly 8.2 не может обрабатывать Java 1.8, поэтому мне пришлось установить все на 1.7, и это сработало.

7
задан Community 8 February 2017 в 14:13
поделиться

6 ответов

Взгляните на мой ответ на аналогичный вопрос (и другие ответы там) о том, как оценивается оставшееся время в проводнике Windows.

На мой взгляд , есть только один способ получить точные оценки:

  • Рассчитайте точное количество байтов, которые нужно скопировать, прежде чем вы начнете процесс копирования.
  • Регулярно пересчитайте вашу оценку (каждые 1, 5 или 10 секунд, YMMV) на основе текущая скорость передачи
  • Текущая скорость передачи может сильно колебаться, когда вы копируете в сети, поэтому используйте среднее значение, например, на основе количества байтов, переданных с момента вашей последней оценки.

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

3
ответ дан 7 December 2019 в 07:49
поделиться

Я сделал нечто подобное, чтобы оценить, когда очередь будет пуста, учитывая, что элементы удаляются из очереди быстрее, чем ставятся в очередь. Я использовал линейную регрессию по последним N показаниям (время, размер очереди).

Это дает лучшие результаты, чем наивный

(bytes_copied_so_far / elapsed_time) * bytes_left_to_copy
2
ответ дан 7 December 2019 в 07:49
поделиться

Больше всего я бы никогда не отображал секунды (только часы и минуты). Я думаю, это действительно неприятно, когда вы сидите и ждете минуту, пока таймер перескакивает между 10 и 20 секундами. И всегда отображать реальную информацию, например: xxx / yyyy МБ скопировано.

Я бы также включил что-то вроде этого:

 if timeLeft> 5h -> Сообщите пользователю, что это может работать неправильно
if timeLeft> 10h -> Сообщите пользователю, что могут быть лучшие способы переместить файл
if timeLeft> 24h -> Отменить и проверить наличие проблем

Я бы также проинформировал пользователя, если расчетное время слишком сильно различается

И если это не слишком сложно, должна быть функция автоматической проверки, которая проверяет, жив ли процесс и работает ли он правильно каждые 1-10 минут. (в зависимости от приложения).

0
ответ дан 7 December 2019 в 07:49
поделиться

говоря о сетевом копировании файлов, лучше всего рассчитать размер передаваемого файла, сетевой ответ и т. Д. Один раз я использовал подход:

Скорость соединения = Пинг и вычислить время прохождения туда и обратно для пакетов размером 15 Кбайт.

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

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

0
ответ дан 7 December 2019 в 07:49
поделиться

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

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

Например, диалоговые сообщения, получаемые с интервалом в 1 секунду, когда соединение ненадолго прерывается:

remaining: 60 seconds               // estimate is 60 seconds
remaining: 59 seconds               // estimate is 59 seconds
remaining: delayed [was 59 seconds] // estimate is 12 hours
remaining: delayed [was 59 seconds] // estimate is infinity
remaining: delayed [was 59 seconds] // got data: estimate is 59 seconds
// six seconds later
remaining: 53 seconds               // estimate is 53 seconds
1
ответ дан 7 December 2019 в 07:49
поделиться
  • Запуск глобального таймера, который срабатывает, скажем, каждые 1000 миллисекунд и обновляет счетчик общего прошедшего времени. Назовем эту переменную « elapsedTime ».
  • Пока файл копируется, обновите некоторую локальную переменную, указав уже скопированное количество. Назовем эту переменную « totalCopied »
  • В событии таймера, которое периодически возникает, разделите totalCopied на totalElapsed , чтобы получить количество байтов, скопированных за один таймер. интервал (в данном случае 1000 мс). Назовем эту переменную « bytesPerSec »
  • Разделим общий размер файла на bytesPerSec и получим общее количество секунд, теоретически необходимое для копирования этого файла. Назовем эту переменную RemainTime
  • Вычтите elapsedTime из RemainTime , и вы получите несколько точный расчет времени копирования файла.
1
ответ дан 7 December 2019 в 07:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: