【问题标题】:Count the number of files in folder (the fastest way)计算文件夹中的文件数(最快的方法)
【发布时间】:2014-04-17 20:54:24
【问题描述】:

我在计算文件共享上的文件时遇到问题(存在时间超过 1 小时):

两种“已知”方法:

获取文件

dir.Getfiles.Where(Function(x) x.CreationTime < DateTime.Now.AddHours(-1)).Count()

链接:GetFiles

枚举文件

dir.EnumerateFiles.Where(Function(x) x.CreationTime < DateTime.Now.AddHours(-1)).Count()

链接:EnumerateFiles

有没有更快的方法来计算文件夹/文件共享中的文件数量?

文件数量可能从 2000 到 500 000 以上不等。上面显示的两种方法都显示超过 30 000 个文件时性能急剧下降。

在 SO 上发现的问题并没有为我解决:

fastest-way-to-count-folder-files-in-net-4-0

how-to-correctly-count-the-number-of-files-in-a-folder

【问题讨论】:

  • 一个目录下有500,000个文件吗?也许这就是你应该首先尝试解决的问题。
  • 没有办法绕过那个自动取款机。我们正在生产环境中工作,成本会飙升。我们希望使用上述计数来监控不同数量的文件,以便创建超时图。我们的最终目标当然是拆分不同的业务流程,但没有实际依据/证据我们不能要求管理层投资。

标签: .net vb.net count directory


【解决方案1】:

另一种选择是:

FileSystemWatcher Class

跟踪添加和删除。
从集合中添加和删除。

我认为 DirectoryInfo.EnumerateFiles 会更快。
有两个原因:
它在整个集合返回之前枚举的一个
二它包括日期。 Getfiles 仅返回名称,因此它可能会第二次获取日期。

DirectoryInfo Methods

【讨论】:

  • 正是我所需要的!我可以使用EnumerateFiles 获取原始文件数量。之后,我可以使用 FileSystemWatcher 监视更改(使用 createddeleted)。刚刚在 testdirectory 上做了一个测试,效果比我原来的解决方案好很多。
  • 您使用的是什么类型的集合,您在集合中存储了什么?
  • 实际上我正在使用Count() 并将其存储在一个整数中。这个整数在我们的监控工具中使用。文件的内容对我们没有用。整数行如图所示。陡峭的倾斜指向指定系统上的问题。队列中的正常平均文件为 12000,如果超过 90 000,则指定系统可能存在问题。 (系统每小时最多可处理 30 000 个文件)
  • 好了,不用解释了。但是,如果您只是使用计数,您不知道有多少超过一小时。但这使它变得更容易和更快。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-24
  • 1970-01-01
  • 1970-01-01
  • 2016-02-25
  • 2013-07-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多