la forma ingenua es bytes_downloaded/(now - start_time)
, pero que se convierte en inexacta si la velocidad de conexión fluctúa violentamente, o si el usuario inicia otra descarga (tal vez en otra aplicación) la mitad de su descarga. Ambas cosas pueden suceder si el usuario ejecuta un torrente en segundo plano.
Una mejor manera (aunque más difícil de implementar) es mantener una serie de muestras periódicas y presentar el promedio.
Comience con una matriz que contenga 0. La matriz es de muestras, y cada muestra es la cantidad de bytes descargados desde la muestra anterior. Luego comienza la descarga.
Cada medio segundo (puede probar diferentes intervalos), mida cuántos bytes ha descargado, luego resta el total anterior de este nuevo total. Agregue la diferencia como el último elemento nuevo en la matriz. Si esto hace crecer la matriz más allá de un cierto tamaño, corte el primer elemento (muestra más antigua). Luego, presente el promedio de todas las muestras.
Debe guardar entre 2 y 5 segundos de muestras, y el intervalo debe ser de entre 0,5 y 1 segundos (es una compensación entre la moneda y el rendimiento).
Es posible que también desee eliminar el primer elemento de la matriz después de recuperarlo si es cero. Esto hace que su reportaje inicial sea más preciso y le ayuda a recuperarse más rápidamente de los puestos, ya que no incluye los ceros viejos en el promedio.
Para quienes se encuentren con esta pregunta, ésta también puede ser útil: http://stackoverflow.com/q/2779600/115730 –