计算目录大小

我试图以分开负载的方式计算目录大小,以便用户可以看到计数进度。 我认为这样做的一个合乎逻辑的方法是首先创建目录树,然后进行计算所有文件长度的操作。

我意想不到的是,大部分时间(磁盘I / O)来自创建目录树,然后几乎立即通过FileInfo[]来实现,而实际上没有磁盘I / O。

我尝试过使用Directory.GetDirectories() ,简单地创建目录名称的字符串树,并使用DirectoryInfo对象,并且两种方法仍然占用大部分I / O时间(当然是读取MFT)遍历每个目录中文件的所有FileInfo.Length

我想没有办法减少I / O使树显着,我想我只是想知道为什么这个操作比遍历更多的文件需要更多的时间?

此外,如果任何人都可以推荐一种非递归方式来计算事物的数量(因为我似乎需要将枚举分开并平衡它,以便使大小的计算更具响应性)。 为每个子目录创建一个线程并让调度程序竞争平衡事情可能不会很好,是吗?

编辑:此代码的存储库


您可以使用Parallel.ForEach以并行方式运行目录大小计算。 您可以获取GetDirectories并在每个节点上运行Parallel.ForEach。 您可以使用变量来跟踪大小并将其显示给用户。 每个并行计算将在同一个变量上递增。 如果需要,使用lock()在并行执行之间进行同步。

链接地址: http://www.djcxy.com/p/61023.html

上一篇: Calculating directory sizes

下一篇: friendly input of a digits + spaces string (a credit card number)