我试图计算目录大小的方式分开的负载,使用户可以看到计数进度。 我认为这样做的一个合乎逻辑的方法是首先创build目录树,然后做一个计算所有文件的长度的操作。
我意想不到的是,大部分时间(磁盘I / O)来自于创build目录树,然后几乎立即通过FileInfo[]来实际上没有磁盘I / O。
我已经尝试了两个Directory.GetDirectories() ,简单地创build一个目录名称的string的树,并使用一个DirectoryInfo对象,两种方法仍占用大部分的I / O时间(当然阅读MFT)比较检查每个目录中的文件的所有FileInfo.Length 。
我想没有办法减lessI / O使树显着,我想我只是想知道为什么这个操作需要更多的时间相比,越来越多的文件?
正确的CryptoAPITransform使用? 内存泄漏
在Linux上编译MonoDevelop 5.3时出错
DevExpress DataBinding,添加新logging
如何检测串口是否在使用.net
另外,如果任何人都可以推荐一个非recursion的方法来计算(因为看起来我需要分开枚举和平衡它,以便使得大小更加灵敏)。 为每个子目录创build一个线程,并让调度程序竞争平衡事情可能不会很好,是吗?
编辑: 此代码的存储库
在Windows中对程序进行基准testing的最佳方式是什么?
了解Windows中的AppDomain
WPF应用程序失去触摸function
与本地Windows服务进行通信的“正确”方式
监视Windows窗体应用程序
您可以使用Parallel.ForEach以并行方式运行目录大小计算。 您可以获取GetDirectories并在每个节点上运行Parallel.ForEach。 您可以使用变量来跟踪大小并将其显示给用户。 每个并行计算将在同一个变量上递增。 如果需要,使用lock()在并行执行之间进行同步。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。