【问题标题】:UNC Path Appears To Slow File Enumeration ConsiderablyUNC 路径似乎显着降低了文件枚举速度
【发布时间】:2013-01-16 14:53:21
【问题描述】:

我编写了一个示例应用程序来调试枚举文件的问题。

使用本地路径(例如 C:\Data\MAN)枚举目录比使用 UNC 路径(例如 \\MACHINENAME\man)枚举共享目录快得多。即使这些路径都指向本地机器上的同一个目录。

对于 72000 个文件,这大约需要 10 秒:

DirectoryInfo directoryInfo = new DirectoryInfo(@"C:\Data\MAN");
FileInfo[] fileInfoTest = directoryInfo.GetFiles("*.*", 
                                                 SearchOption.AllDirectories);

对于 72000 个文件,这大约需要 2 分钟:(其中 \\MACHINENAME\man 是共享文件夹 C:\Data\MAN)

DirectoryInfo directoryInfo = new DirectoryInfo(@"\\MACHINENAME\man");
FileInfo[] fileInfoTest = directoryInfo.GetFiles("*.*", 
                                                 SearchOption.AllDirectories);

在使用 UNC 路径时是否会出现这样的开销?

【问题讨论】:

  • @Zarathos 非常有用,虽然我不确定它是否完全回答了这个问题。例如,它周围有没有?
  • 部分问题在于,除非您采取特殊步骤,否则 UNC 需要在每次连接时重新进行身份验证,因此您需要为每次操作付出大量安全开销。为避免重新验证成本,请在开始操作之前建立与 UNC 的持久连接。

标签: c# unc


【解决方案1】:

这是一个老问题,cmets 似乎已经走到了一半,但没有理由不尝试并尝试回答这个问题。这里的文件数是问题的一部分,因为其中有 72,000 个。那到底是怎么回事?

嗯,正如here 已经回答的那样,它本质上归结为在处理本地路径上的 UNC 路径时使用的不同进程之间的上下文切换,特别是调用进程和 SMB 客户端 + 服务器进程。这归结为:直接更快。如果它是本地资源,请不要通过 UNC,显然,涉及的文件越多,速度就越慢。

【讨论】:

  • 感谢您的回答 - 很抱歉,我没有原始来源来测试这个。
猜你喜欢
  • 2022-10-19
  • 2017-10-13
  • 2018-06-18
  • 2016-12-14
  • 1970-01-01
  • 2012-05-15
  • 2022-08-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多