Sto provando a calcolare le dimensioni delle directory in un modo che divide il carico in modo che l'utente possa vedere il progresso del conteggio. Ho pensato che un modo logico per farlo sarebbe quello di creare prima l'albero delle directory, quindi fare un'operazione contando la lunghezza di tutti i file.Calcolo dimensioni directory
La cosa che mi viene tanto inaspettato è che la maggior parte del tempo (disco I/O) proviene da creare la struttura di directory, quindi andare oltre il FileInfo[]
viene quasi istantaneamente con pochissimo disco I/O.
Ho provato sia con Directory.GetDirectories()
, semplicemente creando un albero di stringhe dei nomi delle directory, e utilizzando un oggetto DirectoryInfo
, ed entrambi i metodi ancora prendere la maggior parte del tempo di I/O (lettura della MFT, ovviamente) rispetto per esaminare tutto il FileInfo.Length
per i file in ogni directory.
Suppongo che non ci sia modo di ridurre l'I/O per rendere l'albero significativo, suppongo che mi stia chiedendo perché questa operazione richiede molto più tempo rispetto a passare i file più numerosi?
Inoltre, se qualcuno può consigliare un modo non ricorsivo per calcolare le cose (poiché sembra che sia necessario suddividere l'enumerazione e bilanciarla al fine di rendere la dimensione più più reattiva). Fare un thread per ogni sottodirectory fuori dalla base e lasciare che la competizione del programma di pianificazione equilibri le cose non sarebbe probabilmente molto buona, vero?
EDIT: Repository for this code
Ho anche faticato con il calcolo della dimensione della directory. Ho fatto esattamente quello che hai fatto. Provato> fileInfo [] e poi> Directory.GetDirectories(). Ma ancora non conosco un modo migliore. –
Stai dicendo che chiamare GetDirectories() richiede molto tempo? Non l'ho visto ma, ripeto, non l'ho mai fatto con una grande quantità di directory. Inoltre, perché ti interessa se è ricorsivo? Questo è un compito ricorsivo e non avrai mai così tante directory annidate da far esplodere lo stack. –
consulta http://stackoverflow.com/questions/468119/whats-the-best-way-to-calculate-the-size-of-a-directory-in-net –