我编写了一个示例应用程序来调试枚举文件的问题。
枚举具有本地路径的目录(例如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路径时预计会产生这笔开销吗?
答案 0 :(得分:0)
这是一个老问题,评论似乎已经到了一半,但没有理由不尝试尝试回答这个问题。这里的文件计数是问题的一部分,其中有72,000个。那是怎么回事?
好吧,正如已经回答的here,它主要归结为在本地路径上处理UNC路径时使用的不同进程之间的上下文切换,特别是调用进程和SMB客户端+服务器进程。这归结为:直接更快。如果它是本地资源,请不要通过UNC,显然,涉及的文件越多,它就越慢。