Wie bestimmt Windows, wie lange es dauert, eine bestimmte Aktion für eine Datei auszuführen?

10

Ich wollte wissen, ob es eine Gleichung gibt, die Windows verwendet, um zu bestimmen, wie lange es dauert, eine Aktion für eine Datei auszuführen, z. B. Löschen, Kopieren, Löschen oder Installieren.

Geben Sie hier die Bildbeschreibung ein

Wenn ich beispielsweise eine Datei lösche und Windows "Verbleibende Zeit: 18 Sekunden" anzeigt, wie berechnet und berechnet es diese Zahl?

Yuritsuki
quelle
1
Da diese Zahl häufig falsch ist, wird anhand der Anzahl der zu löschenden Dateien, der Größe und der Geschwindigkeit, zu der die Löschvorgänge zeitlich festgelegt werden, um die Schätzung zu erhöhen oder zu verringern, eine Schätzung vorgenommen.
Cybernard
1
@ Ramhound Und woher weiß es, wie schnell es dauert? Ist es dieselbe statische Variable für alle anderen Computer, einschließlich solcher, die auf SSDs und HDs ausgeführt werden? Was ist, wenn ich 200 GB RAM habe? Was ist, wenn ich 10 MB RAM habe? Wie berechnet man, wie "schnell" eine Aktion ist?
Yuritsuki
2
@imreallyfamecore Nun, die Grundidee ist, dass es misst, wie schnell es für ein paar Sekunden geht, und davon ausgeht, dass der Rest des Prozesses im Durchschnitt mit der gleichen Geschwindigkeit fortgesetzt wird. Wenn sich die Durchschnittsgeschwindigkeit im Laufe der Zeit ändert, wird die Schätzung angepasst (was zu dem berüchtigten "Windows hat mir mitgeteilt, dass es in 10 Minuten kopiert wird und es bereits 2 Stunden her ist!"). Es ist jedoch nur eine Vermutung - es gibt keine Möglichkeit für das Betriebssystem oder eine Anwendung zu wissen, wie lange es wirklich dauern wird. Was ist, wenn die Festplatte beschädigt ist? Oder Sie übertragen über das Netzwerk? Oder gibt es viel Fragmentierung?
Luaan
6
Ich weiß, dass ich dafür bestraft werde, aber ich kann mir nicht helfen. Dies ist NICHT deine Antwort. XKCD: Schätzung
KlaymenDK
10
Der Code:timeLeft = random(1,100);
MadTux

Antworten:

20

Haben Sie bemerkt, dass Sie normalerweise in den ersten Sekunden keine Schätzungen erhalten?

Das liegt daran, dass es in den ersten Sekunden nur die Operation ausführt, die es ausführen muss. Dann, nach einer (kleinen) Zeit, weiß es, wie viel es bereits kopiert / gelöscht / etc hat und wie lange es gedauert hat . Das gibt Ihnen die durchschnittliche Geschwindigkeit der Operation.

Teilen Sie dann die verbleibenden Bytes durch die Geschwindigkeit, und Sie haben die Zeit, die erforderlich ist, um den Vorgang abzuschließen.

Das ist Grundschulmathematik. Wenn Sie 360 ​​km zurücklegen möchten und am Ende der ersten Minute 1 km zurückgelegt haben, wie viel brauchen Sie, um an Ihr Ziel zu gelangen?

Nun, die Geschwindigkeit beträgt 1 km / min. Das sind 60 km / h. 360 km geteilt durch 60 km / h ergeben 6 Stunden (oder 360 km / 1 km / Minute = 360 Minuten = 6 Stunden). Da Sie bereits eine Minute gereist sind, beträgt die geschätzte verbleibende Zeit 5 Stunden und 59 Minuten.

Ersetzen Sie "Reisen" durch "Kopieren" und "km" durch "Bytes" und das ist Ihre Frage.

Unterschiedliche Systeme haben unterschiedliche Methoden zur Zeitschätzung. Sie können die letzte Minute in Anspruch nehmen, und die Schätzungen können stark variieren, oder Sie können die gesamte Zeit in Anspruch nehmen. Wenn sich die Geschwindigkeit tatsächlich dauerhaft ändert, sind Ihre Schätzungen möglicherweise weit von der Realität entfernt. Was ich beschrieben habe, ist die einfachste Methode.

Valmiky Arquissandas
quelle
12
Nur um zu verdeutlichen: Behaupten Sie, dass Windows dies so macht? Oder veranschaulichen Sie nur eine einfache Arithmetik, mit der eine Antwort erhalten werden kann?
Shredderroy
10
und zum letzten Mal 1%dauert es time so far * rand[0 - 10]während der Anzeigefew seconds left
Mark
1
Wenn Sie interessiert sind, erfahren
Richard
1
Ich sage nicht, dass Windows dies so macht. Wenn es genau so läuft, ist es ein Zufall. Es sieht so aus, aber auf diese Weise könnte eine Antwort erhalten werden. Mir schien, dass das Poster wissen wollte, wie das gemacht wird, und Windows wurde als Beispiel gegeben. Eine Einheitskonstante multipliziert mit der verbleibenden Größe (wie er vorgeschlagen hat) ist völlig unmöglich, und ich denke, sie hat gezeigt, dass er keine Ahnung hatte, wie diese Schätzungen vorgenommen wurden.
Valmiky Arquissandas
4
@ValmikyArquissandas: Raymond Chen (Entwickler im Windows-Team von Microsoft) bestätigt diesen Algorithmus in einem Beitrag in seinem Blog und erklärt auch, warum er falsch sein kann. blogs.msdn.com/b/oldnewthing/archive/2004/01/06/47937.aspx
Richard
1

Die Antwort mit einer einfachen Kreuzmultiplikation ist schrecklich herablassend. Ich denke, ich bin mir sicher, dass er das bereits wusste. So schätzen wir ständig auch die Dinge in unserem Kopf.

Das Problem mit Fortschrittsbalken für den Dateivorgang besteht darin, dass dies nur für einheitliche Daten korrekt ist. Wenn Sie also 100 Dateien kopieren, die alle dieselbe Größe haben und Ihr Laufwerk nichts anderes tut, ist der geschätzte Fortschritt genau richtig, aber was ist, wenn der erste 99 Dateien waren kleine txt-Dateien und die letzte ist eine große Videodatei? Der Fortschritt wird weg sein.

Dieses Problem wird weiter verstärkt, wenn Sie nicht Dateien in einem Ordner, sondern in mehreren Unterordnern verarbeiten. Angenommen, Sie haben 5 Unterordner und möchten diese löschen (die Größe spielt in diesem Fall keine große Rolle). Die ersten 4 Ordner enthalten nur weniger als 10 Dateien. Wenn der Vorgang also in den 5. Ordner gelangt, von dem er glaubt, dass es sich um einen handelt 80% fertig, und der fünfte Boom- Ordner enthält 5000 Dateien und Ihr Fortschritt springt zurück auf 1%

WinXP versuchte dies zu umgehen, indem es die Anzahl der Dateien im Voraus zählte. Dies bedeutete, dass XP den Vorgang in den ersten 20 Sekunden (Zeitaufwand) nicht wirklich startete, wenn der Ordner nicht in Windows indiziert war, abhängig von der Anzahl der Dateien zählen), was alle wütend machte.

Obwohl ich auch keine besonderen Kenntnisse darüber habe, wie Windows es macht (aber was gibt es außer dem Zählen von Dateien und Bytes noch), hoffe ich, dass ich veranschaulichen kann, warum es fehlerhaft ist und warum es niemals perfekt sein wird.

Das Beste, was Sie tun könnten, wäre, sich nicht nur auf die Anzahl der Dateien oder die Anzahl der Bytes zu verlassen, sondern einen Durchschnitt aus beiden zu erstellen.

Oder wenn Sie besonders verrückt werden möchten, kann das Betriebssystem eine Datenbank darüber erstellen, wie lange diese Vorgänge in der Vergangenheit auf Ihrem Computer gedauert haben, und dies in die Gleichung einbeziehen.

Letzter Gedanke: Wenn jemand an ein Dateisystem denken würde, das dem Betriebssystem mitteilt, welche Größe jeder Ordner hat, ohne es vorher zu berechnen, würden Sie zumindest eine korrekte Fortschrittsschätzung erhalten, wenn Sie ganze Ordner und nicht nur Teile davon löschen.

Troik
quelle