In che modo Windows determina il tempo necessario per eseguire una determinata azione su un file?


10

Volevo sapere se esiste un'equazione utilizzata da Windows per determinare il tempo impiegato per eseguire un'azione su un file, ad esempio eliminare, copiare, cancellare o installare.

inserisci qui la descrizione dell'immagine

Ad esempio, quando sto eliminando un file e Windows dice "Tempo rimanente: 18 secondi" come si calcola questo numero e si utilizza cosa?


1
Poiché questo numero è spesso errato, è ipotizzabile in base a # file da eliminare, dimensioni e velocità con cui vengono eliminate le tempistiche per aumentare o diminuire la stima.
cybernard,

1
@Ramhound E come fa a sapere quanto velocemente ci vuole? È la stessa variabile statica per tutte le altre macchine, comprese quelle in esecuzione su SSD, HD? E se avessi 200 GB di RAM? Cosa succede se ho 10 MB di RAM? Come si calcola quanto è "veloce" un'azione?
yuritsuki,

2
@imreallyfamecore Bene, l'idea di base è che misura la velocità per alcuni secondi e presume che il resto del processo continuerà alla stessa velocità, in media. Se la velocità media cambia nel tempo, regolerà la stima (portando al famigerato "Windows mi ha detto che sarà copiato in 10 minuti ed è già passato 2 ore!"). È solo una supposizione, tuttavia - non c'è modo per il sistema operativo o qualsiasi applicazione di sapere quanto tempo impiegherà davvero. Cosa succede se l'HDD è danneggiato? O stai trasferendo sulla rete? O c'è molta frammentazione?
Luaan,

6
So che sarò punito per questo, ma non posso fare a meno. Questa NON è la tua risposta. XKCD: Stima
KlaymenDK

10
Il codice:timeLeft = random(1,100);
MadTux,

Risposte:


20

Hai notato che di solito non ti dà alcuna stima nei primi secondi?

Questo perché nei primi secondi, fa solo l'operazione che deve fare. Quindi, dopo un po '(piccolo), sa quanto ha già copiato / cancellato / ecc . E quanto tempo ha impiegato . Questo ti dà la velocità media dell'operazione.

Quindi, dividi i byte rimanenti per la velocità e avrai il tempo necessario per completare l'operazione.

Questa è la matematica della scuola elementare. Se vuoi percorrere 360 ​​km e alla fine del primo minuto hai percorso 1 km, quanto ci vorrà per arrivare a destinazione?

Bene, la velocità è di 1 km / minuto. Sono 60 km / h. 360 km divisi per 60 km / h ti danno 6 ore (o 360 km / 1 km / minuto = 360 minuti = 6 ore). Dato che hai già viaggiato per un minuto, il tempo stimato rimanente è di 5 ore e 59 minuti.

Sostituisci "viaggio" con "copia" e "km" con "byte" e questa è la tua domanda.

Sistemi diversi hanno modi diversi di stimare il tempo. Puoi prendere l'ultimo minuto e le stime possono variare in modo selvaggio, oppure puoi impiegare il tempo pieno e se la velocità cambia effettivamente in modo permanente, le tue stime potrebbero essere molto lontane dalla realtà. Quello che ho descritto è il metodo più semplice.


12
Giusto per chiarire: stai affermando che è così che funziona Windows? O stai semplicemente illustrando qualche semplice aritmetica per mezzo della quale si potrebbe ottenere una risposta?
Shredderroy,

10
e per l'ultimo 1%ci vuole time so far * rand[0 - 10]durante la visualizzazionefew seconds left
Mark

1
Se sei interessato, questa domanda ti dice come Windows (e OSX) formatta il tempo rimasto nella barra di avanzamento una volta che ha un'idea di quanto tempo rimarrà ux.stackexchange.com/q/23624
Richard

1
Non sto dicendo che è così che fa Windows. Se lo fa esattamente così, è una coincidenza. Sembra che lo sia, ma questo è un modo per ottenere una risposta. Mi è sembrato che il poster volesse sapere come è stato fatto e Windows è stato fornito come esempio. Una costante uguale per tutti moltiplicata per la dimensione rimanente (come ha proposto) è completamente impossibile e penso che abbia rivelato che non aveva idea di come fossero fatte queste stime.
Valmiky Arquissandas,

4
@ValmikyArquissandas: Raymond Chen (uno sviluppatore del team Windows di Microsoft) conferma questo algoritmo in un post sul suo blog e spiega anche perché può essere sbagliato. blogs.msdn.com/b/oldnewthing/archive/2004/01/06/47937.aspx
Richard

1

rispondere con una semplice moltiplicazione incrociata è terribilmente condiscendente, penso, sono sicuro che lo sapesse già, è come indoviniamo costantemente le cose anche nella nostra testa.

Il problema con le barre di avanzamento del funzionamento dei file è che è corretto solo per dati uniformi, quindi se copi 100 file che hanno tutte le stesse dimensioni e l'unità non fa nient'altro, i progressi stimati saranno puntuali, ma cosa succede se il primo 99 file erano piccoli file txt e l'ultimo è un file video di grandi dimensioni? Il progresso sarà MODO spento.

Questo problema aumenta ulteriormente quando non si gestiscono i file in una cartella, ma più sottocartelle. Supponi di avere 5 sottocartelle e desideri eliminarle (le dimensioni non contano molto in questo caso), le prime 4 cartelle contengono solo meno di 10 file, quindi quando arriva alla quinta cartella pensa che si tratti di 80% fatto e boom 5a cartella contiene 5000 file e i tuoi progressi tornano all'1%

WinXP ha cercato di aggirare il problema contando in anticipo il numero di file, il che significa che quando la cartella non era indicizzata in Windows, a seconda del numero di file, XP non ha avviato l'operazione per i primi 20 secondi (tempo impiegato conta) che ha reso tutti furiosi.

Quindi, anche se non ho una conoscenza specifica di come funziona Windows (ma cos'altro c'è oltre al conteggio di file e byte) spero di poter illustrare perché è difettoso e perché non sarà mai perfetto.

Il meglio che potresti fare sarebbe di non fare affidamento esclusivamente sul racconto dei filetti O sul conto alla rovescia, ma di ottenere una media dei due.

Oppure, se volevi diventare pazzo di più, il sistema operativo poteva avviare un database di quanto tempo impiegavano queste operazioni in passato sulla tua macchina e considerarlo nell'equazione.

Pensiero finale: se qualcuno pensasse a un filesystem che farebbe sapere al sistema operativo quale dimensione ha ogni cartella, senza calcolarlo prima, otterresti almeno una stima dei progressi corretta quando elimini intere cartelle e non solo parti di esso.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.