Bagaimana cara Windows menentukan berapa lama waktu yang diperlukan untuk melakukan tindakan pada suatu file?

10

Saya ingin tahu apakah ada persamaan yang digunakan Windows untuk menentukan berapa lama waktu yang diperlukan untuk melakukan suatu tindakan pada file, katakanlah delete, untuk menyalin, untuk menghapus, atau untuk menginstal.

masukkan deskripsi gambar di sini

Misalnya, ketika saya menghapus file, dan Windows mengatakan "Sisa waktu: 18 detik" bagaimana cara menghitung angka ini, dan menggunakan apa?

yuritsuki
sumber
1
Karena angka ini sering salah, maka perkiraan berdasarkan # file untuk dihapus, ukuran, dan kecepatan penghapusan waktunya untuk menambah atau mengurangi perkiraan.
cybernard
1
@Ramhound Dan bagaimana cara mengetahui kecepatannya? Apakah itu variabel statis yang sama untuk semua mesin lain, termasuk yang berjalan pada SSD, HD? Bagaimana jika saya memiliki ram 200 GB? Bagaimana jika saya memiliki 10 MB RAM? Bagaimana cara menghitung seberapa "cepat" suatu tindakan?
yuritsuki
2
@imreallyfamecore Yah, ide dasarnya adalah mengukur seberapa cepat itu berlangsung selama beberapa detik, dan mengasumsikan bahwa sisa proses akan berlanjut pada kecepatan yang sama, rata-rata. Jika kecepatan rata-rata berubah dari waktu ke waktu, itu akan menyesuaikan perkiraan (mengarah ke terkenal "Windows mengatakan kepada saya itu akan disalin dalam 10 menit dan sudah 2 jam!"). Tapi ini hanya dugaan - tidak ada cara bagi OS atau aplikasi apa pun untuk mengetahui berapa lama waktu yang dibutuhkan. Bagaimana jika HDD rusak? Atau Anda mentransfer melalui jaringan? Atau ada banyak fragmentasi?
Luaan
6
Saya tahu saya akan dihukum karena ini, tetapi saya tidak bisa menahan diri. Ini BUKAN jawaban Anda. XKCD: Estimasi
KlaymenDK
10
Kode:timeLeft = random(1,100);
MadTux

Jawaban:

20

Pernahkah Anda memperhatikan bahwa biasanya itu tidak memberi Anda perkiraan di detik pertama?

Itu karena pada detik pertama, itu hanya operasi yang harus dilakukan. Kemudian, setelah beberapa saat (kecil), ia tahu berapa banyak yang sudah disalin / dihapus / etc , dan berapa lama . Itu memberi Anda kecepatan rata - rata operasi.

Kemudian, bagi sisa byte dengan kecepatan, dan Anda punya waktu untuk menyelesaikan operasi.

Ini adalah matematika sekolah dasar. Jika Anda ingin melakukan perjalanan 360 km, dan pada akhir menit pertama Anda melakukan perjalanan 1 km, berapa banyak yang dibutuhkan untuk mencapai tujuan Anda?

Nah, kecepatannya 1 km / menit. Itu 60 km / jam. 360 km dibagi 60 km / jam memberi Anda 6 jam (atau 360 km / 1 km / menit = 360 menit = 6 jam). Karena Anda sudah melakukan perjalanan selama satu menit maka perkiraan waktu yang tersisa adalah 5 jam dan 59 menit.

Ganti "perjalanan" dengan "salin" dan "km" dengan "byte" dan itu pertanyaan Anda.

Sistem yang berbeda memiliki cara yang berbeda dalam memperkirakan waktu. Anda dapat mengambil menit terakhir, dan perkiraan dapat sangat bervariasi, atau Anda dapat mengambil waktu penuh, dan jika kecepatan benar-benar berubah secara permanen, perkiraan Anda mungkin jauh dari kenyataan. Apa yang saya jelaskan adalah metode paling sederhana.

Valmiky Arquissandas
sumber
12
Hanya untuk memperjelas: Apakah Anda menegaskan bahwa ini adalah cara Windows melakukannya? Atau apakah Anda hanya mengilustrasikan beberapa aritmatika sederhana dengan mana jawaban dapat diperoleh?
Shredderroy
10
dan untuk yang terakhir 1%diperlukan time so far * rand[0 - 10]saat menampilkanfew seconds left
Mark
1
Jika Anda tertarik, pertanyaan ini memberi tahu Anda bagaimana Windows (dan OSX) memformat waktu yang tersisa ke bilah progres setelah memiliki gagasan tentang berapa lama tersisa ux.stackexchange.com/q/23624
Richard
1
Saya tidak mengatakan ini bagaimana Windows melakukannya. Jika ia melakukannya persis seperti ini, itu adalah kebetulan. Sepertinya memang demikian, tetapi ini adalah cara yang dengannya jawaban dapat diperoleh. Tampak bagi saya bahwa poster ingin tahu bagaimana ini dilakukan, dan Windows diberikan sebagai contoh. Konstanta satu ukuran untuk semua dikalikan dengan ukuran yang tersisa (saat ia mengusulkan) benar-benar tidak mungkin dan saya pikir itu mengungkapkan bahwa ia tidak tahu bagaimana estimasi ini dibuat.
Valmiky Arquissandas
4
@ValmikyArquissandas: Raymond Chen (pengembang di tim Windows di Microsoft) mengonfirmasi algoritme ini dalam posting di blognya dan juga menjelaskan mengapa itu bisa salah. blogs.msdn.com/b/oldnewthing/archive/2004/01/06/47937.aspx
Richard
1

menjawab dengan lintas-perkalian sederhana sangat merendahkan saya pikir, saya yakin dia sudah tahu itu, itu adalah bagaimana kita terus-menerus menebak hal-hal di kepala kita juga.

Masalah dengan bilah kemajuan operasi file adalah bahwa itu hanya benar untuk data yang seragam, jadi jika Anda menyalin 100 file yang memiliki semua ukuran yang sama dan drive Anda tidak melakukan apa-apa lagi, perkiraan kemajuan akan tepat, tetapi bagaimana jika yang pertama 99 file txt-file kecil dan yang terakhir adalah file video besar? Kemajuan akan menjadi WAY off.

Masalah ini semakin meningkat ketika Anda tidak menangani file dalam satu folder, tetapi beberapa folder. Katakanlah Anda memiliki 5 subfolder dan Anda ingin menghapusnya (ukurannya tidak terlalu penting dalam kasus ini), 4 folder pertama hanya berisi kurang dari 10 file, jadi pada saat operasi masuk ke folder ke-5 ia berpikir ini tentang 80% selesai, dan boom folder ke-5 berisi 5000 file dan kemajuan Anda melompat kembali ke 1%

WinXP mencoba untuk mengatasi ini dengan menghitung jumlah file sebelumnya yang berarti bahwa ketika folder tidak diindeks di windows, tergantung pada jumlah file, XP tidak benar-benar memulai operasi selama 20 detik pertama (waktu yang dibutuhkan untuk menghitung) yang membuat semua orang marah.

Jadi, sementara saya juga tidak memiliki pengetahuan khusus tentang bagaimana Windows melakukannya (tapi apa lagi yang ada selain menghitung file dan byte) saya harap saya bisa mengilustrasikan mengapa itu cacat dan mengapa itu tidak akan pernah sempurna.

Yang terbaik yang bisa Anda lakukan adalah tidak hanya mengandalkan filecount ATAU bytecount, tetapi buat rata-rata dari keduanya.

Atau jika Anda ingin menjadi lebih gila, OS dapat memulai basis data tentang berapa lama waktu yang diperlukan untuk operasi ini di mesin Anda dan memasukkannya ke dalam persamaan.

Pikiran terakhir: Jika seseorang berpikir tentang sistem file yang akan membuat OS tahu berapa ukuran setiap folder, tanpa menghitungnya terlebih dahulu, Anda setidaknya akan mendapatkan estimasi progres yang benar ketika menghapus seluruh folder dan bukan hanya sebagian saja.

Troik
sumber