Como o Windows determina quanto tempo leva para executar uma determinada ação em um arquivo?

10

Eu queria saber se existe uma equação usada pelo Windows para determinar quanto tempo leva para executar uma ação em um arquivo, por exemplo, excluir, copiar, apagar ou instalar.

insira a descrição da imagem aqui

Por exemplo, quando estou excluindo um arquivo, e o Windows diz "Tempo restante: 18 segundos", como está calculando esse número e usando o quê?

yuritsuki
fonte
1
Como esse número está freqüentemente errado, é um palpite baseado em # arquivos para excluir, dimensionar e acelerar as exclusões são cronometradas para aumentar ou diminuir o palpite.
cybernard
1
@ Ramhound E como ele sabe quão rápido é preciso? É a mesma variável estática para todas as outras máquinas, incluindo aquelas executadas em SSDs, HDs? E se eu tiver 200 GB de RAM? E se eu tiver 10 MB de RAM? Como é calcular o quão "rápida" é uma ação?
yuritsuki
2
@imreallyfamecore Bem, a idéia básica é que ela mede a velocidade com que está indo por alguns segundos e assume que o restante do processo continuará na mesma velocidade, em média. Se a velocidade média mudar ao longo do tempo, ela ajustará a estimativa (levando ao infame "Windows me disse que será copiado em 10 minutos e já se passaram duas horas!"). No entanto, é apenas um palpite - não há como o sistema operacional ou qualquer aplicativo saber quanto tempo realmente levará. E se o HDD estiver corrompido? Ou você está transferindo pela rede? Ou há muita fragmentação?
Luaan
6
Eu sei que vou ser punido por isso, mas não posso me ajudar. Esta não é a sua resposta. XKCD: Estimation
KlaymenDK
10
O código:timeLeft = random(1,100);
MadTux

Respostas:

20

Você já reparou que, geralmente, não fornece estimativas nos primeiros segundos?

Isso ocorre porque, nos primeiros segundos, ele faz a operação que precisa fazer. Depois de um tempo (pequeno), ele sabe quanto já copiou / excluiu / etc e quanto tempo levou . Isso fornece a velocidade média da operação.

Em seguida, divida os bytes restantes pela velocidade e você terá o tempo necessário para concluir a operação.

Isso é matemática da escola primária. Se você deseja percorrer 360 km e, no final do primeiro minuto, percorreu 1 km, quanto levará para chegar ao seu destino?

Bem, a velocidade é de 1 km / minuto. Isso é 60 km / h. 360 km dividido por 60 km / h fornece 6 horas (ou 360 km / 1 km / minuto = 360 minutos = 6 horas). Como você já viajou por um minuto, o tempo estimado restante é de 5 horas e 59 minutos.

Substitua "viajar" por "copiar" e "km" por "bytes" e essa é a sua pergunta.

Sistemas diferentes têm maneiras diferentes de estimar o tempo. Você pode aproveitar o último minuto e as estimativas podem variar bastante, ou o tempo inteiro e, se a velocidade realmente mudar permanentemente, suas estimativas podem estar muito distantes da realidade. O que eu descrevi é o método mais simples.

Valmiky Arquissandas
fonte
12
Apenas para esclarecer: você está afirmando que é assim que o Windows faz isso? Ou você está apenas ilustrando alguma aritmética simples por meio da qual uma resposta poderia ser obtida?
21714 Shredderroy
10
e para a última 1%demora time so far * rand[0 - 10]enquanto exibefew seconds left
Mark
1
Se você estiver interessado, esta pergunta informará como o Windows (e OSX) formata o tempo restante na barra de progresso, uma vez que tenha uma idéia de quanto tempo resta ux.stackexchange.com/q/23624
Richard
1
Não estou dizendo que é assim que o Windows faz. Se fizer exatamente assim, é uma coincidência. Parece que é, mas essa é uma maneira pela qual uma resposta pode ser obtida. Pareceu-me que o pôster queria saber como isso é feito, e o Windows foi dado como exemplo. Uma constante de tamanho único multiplicada pelo tamanho restante (como ele propôs) é completamente inviável e acho que revelou que ele não tinha idéia de como essas estimativas foram feitas.
Valmiky Arquissandas
4
@ValmikyArquissandas: Raymond Chen (um desenvolvedor da equipe do Windows na Microsoft) confirma esse algoritmo em uma postagem em seu blog e também explica por que pode estar errado. blogs.msdn.com/b/oldnewthing/archive/2004/01/06/47937.aspx
Richard
1

responder com uma simples multiplicação cruzada é terrivelmente condescendente, eu acho, tenho certeza de que ele já sabia disso, é como nós também adivinhamos constantemente as coisas em nossa mente.

O problema com as barras de progresso da operação de arquivo é que ele só está correto para dados uniformes; portanto, se você copiar 100 arquivos com o mesmo tamanho e sua unidade não estiver fazendo mais nada, o progresso estimado estará no local, mas e se o primeiro 99 arquivos eram pequenos arquivos txt e o último é um arquivo de vídeo grande? O progresso será MUITO FORA.

Esse problema aumenta ainda mais quando você não está manipulando arquivos em uma pasta, mas em várias subpastas. Digamos que você tenha 5 subpastas e deseje excluí-las (nesse caso, o tamanho não importa muito), as 4 primeiras pastas contêm apenas menos de 10 arquivos; portanto, no momento em que a operação chega à 5ª pasta, ela pensa que é sobre 80% concluído, e a 5ª pasta do boom contém 5000 arquivos e seu progresso volta para 1%

O WinXP tentou contornar isso contando o número de arquivos anteriormente, o que significava que, quando a pasta não era indexada no Windows, dependendo do número de arquivos, o XP realmente não iniciava a operação nos primeiros 20 segundos (tempo necessário para contagem), o que deixou todo mundo furioso.

Portanto, embora eu também não tenha conhecimento especial de como o Windows faz isso (mas o que mais existe além da contagem de arquivos e bytes), espero poder ilustrar por que ele é defeituoso e por que nunca será perfeito.

O melhor que você poderia fazer seria não confiar apenas na contagem de arquivos OU pelo número de entradas, mas criar uma média das duas.

Ou, se você quiser enlouquecer, o sistema operacional poderá iniciar um banco de dados de quanto tempo essas operações levaram no passado em sua máquina e levar isso em consideração na equação.

Pensamento final: se alguém pensasse em um sistema de arquivos que informasse o sistema operacional sobre o tamanho de cada pasta, sem calculá-la primeiro, você obteria uma estimativa correta do progresso ao excluir pastas inteiras e não apenas partes dela.

Troik
fonte