UNC路径似乎显着减慢文件枚举

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

枚举具有本地路径的目录(例如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路径时是否需要这笔开销?

这是一个老问题,评论似乎已经到了一半,但没有理由不尝试尝试回答这个问题。 这里的文件计数是问题的一部分,其中有72,000个。 发生什么了?

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