Windows, bir dosya üzerinde belirli bir eylemi gerçekleştirmenin ne kadar süreceğini nasıl belirler?


10

Windows'un bir dosya üzerinde bir eylem gerçekleştirmenin, silme, kopyalama, silme veya yüklemenin ne kadar süreceğini belirlemek için kullandığı bir denklem olup olmadığını bilmek istedim.

resim açıklamasını buraya girin

Örneğin, bir dosyayı sildiğimde ve Windows "Kalan süre: 18 saniye" derken bu sayıyı nasıl hesaplıyor ve ne kullanıyor?


1
Bu sayı sık sık yanlış olduğundan, silme, boyutlandırma ve hız # dosyalarına göre tahmin edilir, tahminleri artırmak veya azaltmak için silme zamanlaması yapılır.
cybernard

1
@Ramhound Ve ne kadar hızlı sürdüğünü nasıl bilebilir? SSD'lerde, HD'lerde çalışanlar da dahil olmak üzere diğer tüm makineler için aynı statik değişken mi? 200 GB koçum varsa ne olur? 10 MB RAM'im varsa ne olur? Bir eylemin ne kadar "hızlı" olduğunu nasıl hesaplar?
yuritsuki

2
@imreallyfamecore Temel fikir, birkaç saniye boyunca ne kadar hızlı gittiğini ölçmesi ve sürecin geri kalanının ortalama olarak aynı hızda devam edeceğini varsaymasıdır. Ortalama hız zaman içinde değişirse, tahmini ayarlayacaktır (rezil "Windows bana 10 dakika içinde kopyalanacağını ve zaten 2 saat geçtiğini söyledi!"). Yine de bu bir tahmin - işletim sisteminin veya herhangi bir uygulamanın gerçekten ne kadar süreceğini bilmesi mümkün değil. HDD bozulursa ne olur? Yoksa ağ üzerinden mi aktarıyorsunuz? Yoksa çok fazla parçalanma mı var?
Luaan

6
Bunun için cezalandırılacağımı biliyorum, ama kendime yardım edemem. Bu senin cevabın değil. XKCD: Tahmin
KlaymenDK

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

Yanıtlar:


20

Genellikle ilk saniyelerde herhangi bir tahmin vermediğini fark ettiniz mi?

Çünkü ilk saniyeler içinde sadece yapması gereken işlemi yapıyor. Sonra, sonra bir (küçük) iken, bildiği zaten kopyalanan ne kadar / silinmiş / vs , ve ne kadar sürdüğünü . Bu işlemin ortalama hızını verir .

Ardından, kalan baytları hıza bölün ve işlemi tamamlamak için gereken zamana sahip olun.

Bu ilkokul matematik. 360 km seyahat etmek istiyorsanız ve ilk dakikanın sonunda 1 km seyahat ettiyseniz, gideceğiniz yere varmanız ne kadar sürer?

Hız 1 km / dakikadır. Saatte 60 km. 360 km bölü 60 km / s size 6 saat (veya 360 km / 1 km / dakika = 360 dakika = 6 saat) verir. Zaten bir dakika seyahat ettiğiniz için tahmini kalan süre 5 saat 59 dakikadır.

"Seyahat" i "kopya" ile ve "km" yi "bayt" ile değiştirin ve bu sizin sorunuz.

Farklı sistemlerin zamanı tahmin etmenin farklı yolları vardır. Son dakikayı alabilir ve tahminler çılgınca değişebilir veya tam zamanı alabilir ve hız gerçekten kalıcı olarak değişirse, tahminleriniz gerçek dışı olabilir. Tarif ettiğim en basit yöntem.


12
Sadece açıklığa kavuşturmak için: Windows'un bu şekilde olduğunu mu iddia ediyorsunuz? Yoksa sadece bir cevabı alabileceğiniz basit bir aritmetiği mi gösteriyorsunuz?
Shredderroy

10
ve son 1%olarak time so far * rand[0 - 10]görüntülenirken alır few seconds left
Mark

1
İlgileniyorsanız, bu soru size Windows (ve OSX) 'un ne kadar süre kaldığı hakkında bir fikir edindikten
Richard

1
Windows'un böyle yaptığını söylemiyorum. Eğer aynen böyle yaparsa, bu bir tesadüf. Öyle görünüyor, ama bu bir cevap elde etmek için bir yol. Poster bana bunun nasıl yapıldığını bilmek istedi ve Windows örnek olarak verildi. Kalan büyüklükle (önerdiği gibi) çarpılan tek boyutlu bir sabitin tamamı mümkün değildir ve bence bu tahminlerin nasıl yapıldığına dair hiçbir fikri olmadığını ortaya koydu.
Valmiky Arquissandas

4
@ValmikyArquissandas: Raymond Chen (Microsoft'ta Windows ekibindeki bir geliştirici) bu algoritmayı blogundaki bir gönderide onaylıyor ve bunun neden yanlış olabileceğini açıklıyor. blogs.msdn.com/b/oldnewthing/archive/2004/01/06/47937.aspx
Richard

1

basit bir çarpma çarpımı ile cevaplamak son derece küçümseyici olduğunu düşünüyorum, eminim zaten biliyordu, biz de sürekli kafamızdaki şeyleri tahmin ediyoruz.

Dosya işlem ilerleme çubukları ile ilgili sorun, sadece tekdüze veriler için doğru olmasıdır, bu yüzden aynı boyuta sahip 100 dosyayı kopyalarsanız ve sürücünüz başka bir şey yapmazsa, tahmini ilerleme yerinde olur, ancak ya ilk 99 dosya küçük txt dosyaları ve sonuncusu büyük bir video dosyası mı? İlerleme WAY kapalı olacak.

Bu sorun, bir klasördeki dosyaları değil, birden çok alt klasörü işlediğinizde daha da artar. 5 alt klasörünüz olduğunu ve bunları silmek istediğinizi varsayalım (bu durumda boyutun önemi yoktur), ilk 4 klasörde yalnızca 10'dan az dosya bulunur, bu nedenle işlem 5. klasöre geldiğinde, bunun hakkında olduğunu düşünür. % 80 tamamlandı ve boom 5. klasör 5000 dosya içeriyor ve ilerlemeniz% 1'e geri dönüyor

WinXP, dosya sayısını önceden sayarak bu sorunu gidermeye çalıştı; bu, klasör pencerelere endekslenmediğinde, dosya sayısına bağlı olarak, XP'nin ilk 20 saniye boyunca ( herkesin öfkeli olmasını sağladı.

Bu yüzden, Windows'un bunu nasıl yaptığına dair özel bir bilgim olmasa da (ancak dosya ve bayt saymaktan başka ne var) Umarım neden kusurlu olduğunu ve neden asla mükemmel olmayacağını gösterebilirim.

Yapabileceğiniz en iyi şey sadece filecount VEYA bytecount'a güvenmek değil, ikisinden ortalama oluşturmaktır.

Veya ekstra çılgınlık yapmak istiyorsanız, işletim sistemi bu işlemlerin makinenizde ne kadar sürdüğünü ve denklemi hesaba kattığının bir veritabanını başlatabilir.

Son düşünce: Birisi işletim sistemine her klasörün hangi büyüklükte olduğunu bildirecek bir dosya sistemi düşünürse, önce onu hesaplamaksızın, en azından sadece bir kısmını değil, tüm klasörleri silerken doğru ilerleme tahminini alırsınız.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.