加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 计算目录大小

发布时间:2020-12-15 08:00:51 所属栏目:百科 来源:网络整理
导读:我正在尝试以分割负载的方式计算目录大小,以便用户可以看到计数进度.我认为这样做的逻辑方法是首先创建目录树,然后执行计算所有文件长度的操作. 我意想不到的是,大部分时间(磁盘I / O)来自创建目录树,然后几乎立即通过FileInfo []几乎没有磁盘I / O. 我已经
我正在尝试以分割负载的方式计算目录大小,以便用户可以看到计数进度.我认为这样做的逻辑方法是首先创建目录树,然后执行计算所有文件长度的操作.

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

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

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

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

编辑:Repository for this code

解决方法

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读