У меня есть кроссплатформенное приложение C ++, где я загружаю огромный файл Икс.
Во время загрузки я хотел бы показать «текущую» скорость загрузки и приблизительное время.
К сожалению, скорость загрузки скачет повсюду (от 1,5 МБ до 100 КБ), что, в свою очередь, приводит к тому, что расчетное время не очень полезно.
Вместо того, чтобы изобретать велосипед, мне любопытно, есть ли какие-либо лучшие практики, когда речь идет о демпфировании изменений в скорости загрузки или о том, как наилучшим образом выполнить эти вычисления в удобной для пользователя форме.
Вы можете просто усреднить скорость за более длительный период времени, например, 30 секунд или более. Алгоритм очень прост: отслеживать, какой размер файла был когда-то, например, каждую секунду в массиве. Затем вы можете вычислить среднюю скорость за последние 30 секунд, вычтя размер файла по состоянию на 30 секунд назад из текущего размера файла и разделив его на 30 секунд.
Другой популярный метод — придать больший вес новым измерениям. Например, измерения за последние 30 секунд дают вес 1
, за предыдущие 30 секунд дан меньший вес (например, 1/2
), затем 1/4
и так далее (вероятно, вам следует остановиться на 1/8
или так). Таким образом, старая скорость все еще будет играть определенную роль, но будет быстро забыта, и некоторое затухание все равно будет иметь место.
Вы должны прочитать о Завершая двенадцать месяцев, это должно дать вам некоторые идеи, как это работает.
Других решений пока нет …