В целом, я думаю, что вы ищете способ мгновенного обмена скоростью передачи, который обычно получается в среднем за небольшой период.
Проблема в том, что для того, чтобы быть реактивной, период обычно чрезвычайно мал, что приводит к эффекту йои.
Я бы предложил очень простую схему, давайте ее смоделировать.
Подумайте о скорости кривой (y) с течением времени (x).
Мгновенная скорость, не более, чем чтение y для текущего x (x0).
Средняя скорость, не более, чем Integral(f(x), x in [x0-T,x0])/T
схема я предлагаю не применить фильтр, чтобы дать больший вес последние минуты, в то же время, принимая во внимание прошлые моменты.
Это можно легко реализовать, как g(x,x0,T) = 2 * (x - x0) + 2T
которая является простой треугольник поверхности Т.
И теперь вы можете вычислить Integral(f(x)*g(x,x0,T), x in [x0-T,x0])/T
, которые должны работать, потому что обе функции всегда положительны.
Конечно, у вас может быть другой g
, если он всегда положителен в данном интервале и что его интеграл на интервале равен T (так что его собственное среднее значение равно 1).
Преимущество этого метода состоит в том, что, поскольку вы придаете больше веса непосредственным событиям, вы можете оставаться довольно реактивным, даже если вы считаете, что больше временных интервалов (чтобы среднее значение было более точным и менее восприимчивым к икотам).
Кроме того, что я редко видел, но думаю, что буду давать более точные оценки будет коррелировать время, используемое для вычисления среднего до расчетного времени, оставшегося:
- если скачать 5KO файл, он будет чтобы быть загруженным в одно мгновение, не нужно оценивать
- Если я загружу файл 15 Mo, это займет примерно 2 минуты, поэтому я бы хотел, чтобы оценки ... каждые 5 секунд?
- если я скачу файл 1.5 Go, он будет принимать ... ну около 200 минут (с той же скоростью) ...то есть 3h20m ... возможно, что оценок каждую минуту будет достаточно?
Таким образом, чем дольше будет загружаться загрузка, тем меньше реактивных я должен быть, и тем больше я могу усреднить. В общем, я бы сказал, что окно может охватывать 2% от общего времени (возможно, за исключением нескольких первых оценок, потому что люди ценят немедленную обратную связь). Кроме того, достаточно указать прогресс всего% за раз. Если задача длинная, я все равно готов был ждать.
обязательной ссылкой XKCD: http://www.xkcd.com/612/ – jason
Дубликат http://stackoverflow.com/questions/933242/smart-progress-bar-eta-computation –