Comment Windows détermine-t-il le temps nécessaire pour effectuer une action donnée sur un fichier?

10

Je voulais savoir s'il y a une équation que Windows utilise pour déterminer combien de temps il faut pour effectuer une action sur un fichier, par exemple supprimer, copier, effacer ou installer.

entrez la description de l'image ici

Par exemple, lorsque je supprime un fichier et que Windows indique «Temps restant: 18 secondes», comment calcule-t-il ce nombre et comment?

yuritsuki
la source
1
Comme ce nombre est souvent erroné, il est approximatif en fonction de # fichiers à supprimer, dimensionne et accélère les suppressions sont chronométrées pour augmenter ou diminuer la approximation.
cybernard
1
@Ramhound Et comment sait-il à quelle vitesse cela prend? S'agit-il de la même variable statique pour toutes les autres machines, y compris celles fonctionnant sur SSD, HD? Et si j'ai 200 Go de RAM? Et si j'ai 10 Mo de RAM? Comment calcule-t-elle la «rapidité» d'une action?
yuritsuki
2
@imreallyfamecore Eh bien, l'idée de base est qu'il mesure la vitesse à laquelle il va pendant quelques secondes, et suppose que le reste du processus se poursuivra à la même vitesse, en moyenne. Si la vitesse moyenne change avec le temps, cela ajustera l'estimation (ce qui conduit à l'infâme "Windows m'a dit qu'il sera copié dans 10 minutes et cela fait déjà 2 heures!"). C'est juste une supposition, cependant - il n'y a aucun moyen pour le système d'exploitation ou toute application de savoir combien de temps cela prendra vraiment. Que faire si le disque dur est corrompu? Ou vous transférez sur le réseau? Ou il y a beaucoup de fragmentation?
Luaan
6
Je sais que je serai puni pour cela, mais je ne peux pas m'en empêcher. Ce n'est PAS votre réponse. XKCD: Estimation
KlaymenDK
10
Le code:timeLeft = random(1,100);
MadTux

Réponses:

20

Avez-vous remarqué qu'en général, cela ne vous donne aucune estimation dans les premières secondes?

C'est parce que dans les premières secondes, il fait juste l'opération qu'il doit faire. Puis, après un (petit) moment, il sait combien il a déjà copié / supprimé / etc , et combien de temps cela a pris . Cela vous donne la vitesse moyenne de l'opération.

Ensuite, divisez les octets restants par la vitesse, et vous aurez le temps qu'il faudra pour terminer l'opération.

Ce sont les mathématiques du primaire. Si vous voulez parcourir 360 km et à la fin de la première minute que vous avez parcouru 1 km, combien vous faudra-t-il pour arriver à destination?

Eh bien, la vitesse est de 1 km / minute. C'est 60 km / h. 360 km divisé par 60 km / h vous donne 6 heures (ou 360 km / 1 km / minute = 360 minutes = 6 heures). Puisque vous avez déjà voyagé pendant une minute, le temps estimé restant est de 5 heures et 59 minutes.

Remplacez "travel" par "copy" et "km" par "bytes" et c'est votre question.

Différents systèmes ont différentes manières d'estimer le temps. Vous pouvez prendre la dernière minute, et les estimations peuvent varier énormément, ou vous pouvez prendre tout le temps, et si la vitesse change réellement de façon permanente, vos estimations peuvent être loin de la réalité. Ce que j'ai décrit est la méthode la plus simple.

Valmiky Arquissandas
la source
12
Juste pour clarifier: affirmez-vous que c'est ainsi que Windows procède? Ou est-ce que vous illustrez simplement une arithmétique simple au moyen de laquelle une réponse pourrait être obtenue?
Shredderroy
10
et pour la dernière fois que 1%cela prend time so far * rand[0 - 10]lors de l'affichagefew seconds left
Mark
1
Si vous êtes intéressé, cette question vous indique comment Windows (et OSX) formate le temps restant dans la barre de progression une fois qu'il a une idée du temps restant ux.stackexchange.com/q/23624
Richard
1
Je ne dis pas que c'est ainsi que Windows le fait. S'il le fait exactement comme ça, c'est une coïncidence. Il semble que ce soit le cas, mais c'est un moyen par lequel une réponse pourrait être obtenue. Il m'a semblé que l'affiche voulait savoir comment cela se faisait, et Windows a été donné comme exemple. Une constante unique multipliée par la taille restante (comme il l'a proposé) est totalement irréalisable et je pense qu'elle a révélé qu'il n'avait aucune idée de la façon dont ces estimations ont été faites.
Valmiky Arquissandas
4
@ValmikyArquissandas: Raymond Chen (un développeur de l'équipe Windows chez Microsoft) confirme cet algorithme dans une publication sur son blog et explique également pourquoi il peut être faux. blogs.msdn.com/b/oldnewthing/archive/2004/01/06/47937.aspx
Richard
1

répondre avec une simple multiplication croisée est terriblement condescendant Je pense, je suis sûr qu'il le savait déjà, c'est ainsi que nous estimons constamment les choses dans notre tête.

Le problème avec les barres de progression de l'opération de fichier est qu'il n'est correct que pour des données uniformes, donc si vous copiez 100 fichiers qui ont tous la même taille et que votre lecteur ne fait rien d'autre, la progression estimée sera exacte, mais que se passera-t-il si le premier 99 fichiers étaient de petits fichiers txt et le dernier est un gros fichier vidéo? La progression sera WAY off.

Ce problème est encore accru lorsque vous ne gérez pas des fichiers dans un dossier, mais plusieurs sous-dossiers. Supposons que vous ayez 5 sous-dossiers et que vous souhaitez les supprimer (la taille n'a alors pas beaucoup d'importance dans ce cas), les 4 premiers dossiers ne contiennent que moins de 10 fichiers, donc au moment où l'opération arrive au 5e dossier, il pense qu'il s'agit 80% fait, et le 5ème dossier de boom contient 5000 fichiers et votre progression revient à 1%

WinXP a essayé de contourner ce problème en comptant le nombre de fichiers au préalable, ce qui signifie que lorsque le dossier n'était pas indexé dans Windows, selon le nombre de fichiers, XP n'a pas vraiment commencé l'opération pendant les 20 premières secondes (temps nécessaire pour comte) qui a rendu tout le monde furieux.

Donc, même si je n'ai pas non plus de connaissances particulières sur la façon dont Windows le fait (mais qu'y a-t-il d'autre que le comptage des fichiers et des octets), j'espère pouvoir illustrer pourquoi il est défectueux et pourquoi il ne sera jamais parfait.

Le mieux que vous puissiez faire serait de ne pas compter uniquement sur le nombre de fichiers OU le nombre de bytec, mais de construire une moyenne sur les deux.

Ou si vous vouliez devenir encore plus fou, le système d'exploitation pourrait démarrer une base de données sur le temps passé par ces opérations sur votre machine et en tenir compte dans l'équation.

Réflexion finale: si quelqu'un pensait à un système de fichiers qui permettrait au système d'exploitation de connaître la taille de chaque dossier, sans le calculer au préalable, vous obtiendriez au moins une estimation de progression correcte lors de la suppression de dossiers entiers et pas seulement de certaines parties.

Troik
la source