最快的.net方式从远程网络共享中的文件中检索最多的元数据

本文关键字:文件 元数据 检索 远程网络 net 方式 共享 | 更新日期: 2023-09-27 18:10:04

在可用的。net System.IO方法/类中,检索远程网络共享(假设是缓慢的非局域网速度链接)上的整个目录列表的最有效方法是什么?

对于10,000+文件,需要抓取:

    <
  1. 名称/gh>大小
  2. 最后修改日期
  3. 创建日期

在循环遍历FileInfo对象获取此信息所需的时间与Windows资源管理器显示相同内容所需的时间之间似乎存在巨大的性能差异。

最快的.net方式从远程网络共享中的文件中检索最多的元数据

是的,这是。net 1.0中为FileInfo类所做的设计选择的副作用。在构造FileInfo对象时,它不存储属性值,而是在使用属性getter时从文件中检索属性值。这样你就能得到房产的最新价值。这当然对大小和日期属性很重要,它们很容易变异。然而,通过网络的往返使得它很慢。

在。net 4中通过添加DirectoryInfo.EnumerateXxxx()方法解决了这个问题。对枚举器的强调现在明显表明,您得到了文件信息的一个可能过时的副本。但要避免往返。

如果你可以使用。net 4,

可以解决你的问题。如果不能,你需要调用FindFirstFile, FindNextFile, FindClose

为了获得最佳性能,您可能会想要使用Win32 api,如FindFirstFile, FindNextFile, GetFileAttributesEx和GetFileSizeEx。

如果你想避免Win32调用,Directory。EnumerateFiles比Directory更有效。GetFiles,因为它在请求时惰性地枚举文件,这可能在内部使用更有效的Win32 api。但是,由于您是通过网络访问的,因此实际上可能需要调用Directory。GetFiles来一次抓取所有文件。实验。