la façon naïve est bytes_downloaded/(now - start_time)
, mais qui devient inexact si la vitesse de connexion varie d'une manière extravagante, ou si l'utilisateur démarre un autre téléchargement (peut-être dans une autre application) à mi-chemin de téléchargement. Les deux peuvent se produire si l'utilisateur exécute un torrent en arrière-plan.
Une meilleure façon (bien que plus difficile à mettre en œuvre) est de conserver une série d'échantillons périodiques et de présenter la moyenne.Commencez par un tableau contenant 0. Le tableau contient des échantillons et chaque échantillon est le nombre d'octets téléchargés depuis l'exemple précédent. Ensuite, lancez le téléchargement.
Chaque demi-seconde (vous pouvez essayer différents intervalles), mesurez le nombre d'octets que vous avez téléchargés, puis soustrayez le total précédent de ce nouveau total. Ajoutez la différence en tant que nouveau dernier élément du tableau. Si cela fait croître le tableau au-delà d'une certaine taille, éliminez le premier élément (échantillon le plus ancien). Ensuite, présentez la moyenne de tous les échantillons. Vous devriez conserver entre 2 et 5 secondes d'échantillons, et l'intervalle devrait se situer entre 0,5 et 1 seconde (c'est un compromis entre la monnaie et la performance).
Vous pouvez également supprimer le premier élément du tableau après l'avoir récupéré s'il est égal à zéro. Cela rend votre reportage plus précis et vous aide à récupérer plus rapidement des étals, puisque vous n'incluez pas les anciens zéros dans la moyenne.
Pour ceux qui rencontrent cette question, celle-ci peut également être utile: http://stackoverflow.com/q/2779600/115730 –