En términos más generales, creo que está buscando una manera de dar una medida instantánea de la velocidad de transferencia, que generalmente se obtiene en promedio durante un período pequeño.
El problema en general es que para ser reactivo, el período suele ser extremadamente pequeño, lo que conduce al efecto yoyo.
Propongo un esquema muy simple, modelémoslo.
Piense en una velocidad de curva (y) en el tiempo (x).
Velocidad instantánea, no es más que leer y para la corriente x (x0).
la velocidad media, no es más que Integral(f(x), x in [x0-T,x0])/T
el esquema que propongo es aplicar un filtro, para dar más peso a los últimos momentos, sin dejar de tomar en cuenta los últimos momentos.
Se puede implementar fácilmente como g(x,x0,T) = 2 * (x - x0) + 2T
que es un simple triángulo de T. superficie
y ahora se puede calcular Integral(f(x)*g(x,x0,T), x in [x0-T,x0])/T
, que debería funcionar debido a que ambas funciones son siempre positivos.
Por supuesto que podría tener un g
diferente siempre que siempre sea positivo en el intervalo dado y que su integral en el intervalo sea T (de modo que su propio promedio sea exactamente 1).
La ventaja de este método es que debido a que le da más peso a los eventos inmediatos, puede permanecer bastante reactivo incluso si considera intervalos de tiempo más largos (para que el promedio sea más preciso y menos susceptible a contratiempos).
Además, lo que pocas veces he visto, pero creo que proporcionar estimaciones más precisas sería correlacionar el tiempo utilizado para el cálculo de la media para el tiempo restante estimado:
- si descargo un archivo 5ko, que va para ser cargado en un instante, sin necesidad de estimar
- si descargo un archivo de 15 Mo, tomará entre 2 minutos aproximadamente, por lo que me gustaría que las estimaciones diga ... ¿cada 5 segundos?
- si descargo un archivo 1.5 Go, tomará ... aproximadamente 200 minutos (con la misma velocidad) ...es decir 3h20m ... ¿tal vez que una estimación de cada minuto sería suficiente?
Por lo tanto, cuanto más tiempo tarde en descargarse, menos reactivo necesito ser, y más puedo promediar. En general, diría que una ventana podría cubrir el 2% del tiempo total (tal vez con excepción de las primeras estimaciones, porque las personas aprecian la retroalimentación inmediata). Además, es suficiente indicar el progreso en porcentaje total a la vez. Si la tarea es larga, estaba dispuesto a esperar de todos modos.
obligatorio referencia xkcd: http://www.xkcd.com/612/ – jason
duplicado de http://stackoverflow.com/questions/933242/smart-progress-bar-eta-computation –