8
votes

Computing Horaires estimés des copies / mouvements de fichier?

, ils pourraient dire

inspiré de ce XCKD Dessinoon Je me demandais exactement quel est le meilleur mécanisme pour fournir une estimation à l'utilisateur d'une copie / mouvement de fichier?

La balise Alt sur XKCD se lit comme suit:

Ils pourraient dire "La connexion est probablement perdue", mais il est plus amusant de faire la moyenne des temps naïfs pour vous donner de l'espoir que si vous attendez 1 163 heures, il finira enfin.

Ignorer le drôle, est-ce vraiment comment cela se fait dans Windows? Que diriez-vous d'autres systèmes d'exploitation? Y a-t-il une meilleure façon?


2 commentaires

Travailler comment cela se fait sur Windows, puis faire exactement le contraire serait un bon point de départ. 8-)


Belle bande dessinée. Je n'avais pas vu celui-ci.


8 Réponses :


0
votes

La plupart de tout ce que je n'ayerais jamais afficher des secondes (seulement des heures et des minutes). Je pense que c'est vraiment frustrant lorsque vous vous êtes assis et attendez une minute pendant que la minuterie saute entre 10 et 20 secondes. Et affichez toujours de véritables informations telles que: XXX / AAAAA MB copié.

Je comprendrais aussi quelque chose comme ceci: P>

if timeLeft > 5h --> Inform user that this might not work properly
if timeLeft > 10h --> Inform user that there might be better ways to move the file
if timeLeft > 24h --> Abort and check for problems


1 commentaires

Que se passe-t-il alors si vous copiez votre copie, 100 Go de vidéos? Cela n'arrive pas beaucoup mais peut arriver ...



0
votes

Parler de la copie de fichier réseau, la meilleure chose à faire est de calculer la taille du fichier à transférer, la réponse du réseau et etc. Une approche que j'ai utilisée une fois était:

vitesse de connexion = ping et calculer le temps de déplacement rond pour les packages avec 15 kbytes.

Obtenez la taille de mon fichier et voir, théoriquement, combien de temps il faudrait si je le briserais 15 kb d'emballages utilisant ma vitesse de connexion.

Recalculez la vitesse de la connexion après le transfert de transfert et de l'heure qui sera dépensée.


0 commentaires

2
votes

J'ai fait quelque chose de similaire à l'estimation lorsqu'une file d'attente sera vide, étant donné que les articles sont déséquilibrés plus rapidement qu'ils ne sont en cours. J'ai utilisé une régression linéaire sur les n lectures les plus récentes de (temps, taille de la file d'attente).

Ceci donne de meilleurs résultats qu'un naïf xxx


0 commentaires

1
votes
  • Démarrez une minuterie globale qui incendie dit, tous les 1000 millisecondes et mettez à jour un compteur de temps éluché total. Appelons cette variable " ELAPSEDTIME "
  • Bien que le fichier soit copié, mettez à jour une variable locale avec le montant déjà copié. Appelons cette variable " totalcopied "
  • Dans l'événement de la minuterie soulevé périodiquement, diviser totalcopied par totalplesed pour donner le nombre d'octets copiés par intervalle de minuterie (dans ce cas, 1000ms). Appelons cette variable " bytespeec "
  • Divisez la taille totale du fichier par byTespeec et obtenez le nombre total de secondes théoriquement requis pour copier ce fichier. Appelons cette variable restanttime
  • Soustraire ELAPSEDTIME à partir de RESTINETIME Et vous un calcul quelque peu précis pour le temps de copie de fichier.

0 commentaires

3
votes

regarder sur Ma réponse à une question similaire (et les autres réponses là-bas) sur la manière dont le temps restant est estimé dans l'Explorateur Windows.

À mon avis, il n'y a qu'un seul moyen d'obtenir de bonnes estimations:

  • Calculez le nombre exact d'octets à copier avant de commencer le processus de copie
  • Recalculez votre estimation régulièrement (toutes les 1, 5 ou 10 secondes, YMMV) sur la base de la vitesse de transfert actuelle
  • La vitesse de transfert en cours peut fluctuer fortement lorsque vous copiez sur un réseau, utilisez donc une moyenne, par exemple en fonction de la quantité d'octets transférés depuis votre dernière estimation.

    Notez que le premier point peut nécessiter un certain travail, si vous copiez plusieurs fichiers. C'est probablement pourquoi les gars de Microsoft ont décidé d'y aller sans elle. Vous devez décider vous-même si les frais généraux supplémentaires créés par ce calcul vaut la peine de donner à votre utilisateur une meilleure estimation.


0 commentaires

1
votes

Je pense que les dialogues devraient simplement admettre leurs limitations. Ce n'est pas gênant parce que cela ne fait pas de donner une estimation de temps utile, c'est ennuyeux, car il propose une estimation qui est une estimation évidente.

Donc, si vous aimez, en fonction du taux actuel ou du taux moyen jusqu'à présent, des moyennes roulantes jusqu'à présent, des moyennes qui roulent des valeurs aberrantes, ou peu importe. Dépend de l'opération et des durées typiques des événements qui le retardent, vous pourriez avoir des algorithmes différents lorsque vous connaissez la copie du fichier implique un lecteur réseau. Mais jusqu'à ce que votre estimation ait été assez cohérente pendant une période de temps égale à la moindre de 30 secondes ou 10% de l'heure estimée, affichez "Oh chère, il semble y avoir une sorte de maintien" lorsqu'il est massivement ralenti, ou juste ignorer C'est si c'est massivement accéléré. p>

Par exemple, des messages de dialogue prises à des intervalles de 1 seconde lorsqu'une connexion stipule brièvement: P>

remaining: 60 seconds               // estimate is 60 seconds
remaining: 59 seconds               // estimate is 59 seconds
remaining: delayed [was 59 seconds] // estimate is 12 hours
remaining: delayed [was 59 seconds] // estimate is infinity
remaining: delayed [was 59 seconds] // got data: estimate is 59 seconds
// six seconds later
remaining: 53 seconds               // estimate is 53 seconds


0 commentaires

0
votes

Je réfléchis à celui-ci moi-même. J'ai une routine de copie - via une interface de style de l'Explorateur Windows - qui permet de transférer des fichiers sélectionnés à partir d'un périphérique Android, à un PC.

Au début, je connais la taille totale du ou des fichiers à copier et, comme j'utilise C # .NET, j'utilise un chronomètre, pour obtenir le temps écoulé et pendant que la copie est En cours, je tiens au total ce qui est copié jusqu'à présent, en termes d'octets.

Je ne l'ai pas encore testé, mais la meilleure façon semble être celle-ci -

estimé = écoulé * ((totassize - copiedsofar) / copielfar)


0 commentaires

0
votes

Je ne l'ai jamais vu comme vous l'expliquez-les, par des octets TraSfeed et des octets totaux.

L'expérience "a toujours fait beaucoup plus de sens (pas bon / précis) si vous utilisez plutôt des octets de chaque fichier, et le nombre de fichiers. C'est ainsi que l'estimation balance sauvagement.

Si vous transférez d'abord des fichiers volumineux, l'estimation va longtemps, même avec la connexion statique. C'est comme si elle pense naïvement que tous les fichiers sont la taille moyenne de celles ainsi transférées, puis fait supposer que la taille moyenne du fichier restera exacte pour tout le temps.

Ceci, et les autres manières, tout s'aggrave lorsque la connexion "vitesse" varie ...


0 commentaires