我试图以分开负载的方式计算目录大小,以便用户可以看到计数进度。我认为这样做的一个合乎逻辑的方法是首先创建目录树,然后进行计算所有文件长度的操作。计算目录大小
我意想不到的是,大部分时间(磁盘I/O)来自于创建目录树,然后通过FileInfo[]
几乎立即发生,几乎没有磁盘I/O。
我已经试过这两个Directory.GetDirectories()
,只需要创建一个目录名的字符串的一棵树,并使用DirectoryInfo
对象,这两种方法仍然需要的I/O的大部分时间(当然读的MFT)相比,检查每个目录中的文件的所有FileInfo.Length
。
我想没有办法减少I/O使树显着,我想我只是想知道为什么这个操作需要更多的时间比更多的文件?另外,如果任何人都可以推荐一种非递归方式来计算事物(因为看起来我需要将枚举分开并平衡它,以便使得大小的计算更具响应性)。为每个子目录创建一个线程并让调度程序竞争平衡事情可能不会很好,是吗?
我也在努力计算目录大小。我已经完成了你所做的。尝试> fileInfo []然后> Directory.GetDirectories()。但我仍然不知道有什么更好的办法。 –
你是说调用GetDirectories()需要很长时间?我还没有看到,但是再一次,我从来没有这样做过大量的目录。另外,为什么你会关心它的递归?这是一个递归的任务,你永远不会有这么多的嵌套目录,你会吹堆栈。 –
参考http://stackoverflow.com/questions/468119/whats-the-best-way-to-calculate-the-size-of-a-directory-in-net –