我目前有一个扫描网络共享的程序.为此,它首先枚举共享上的所有文件和目录.这是一个非常缓慢的过程.我目前使用以下代码,取自本网站的2011年答案.
static class SafeWalk
{
public static IEnumerable<string> EnumerateFiles(string path, string searchPattern, SearchOption searchOpt)
{
try
{
var dirFiles = Enumerable.Empty<string>();
if (searchOpt == SearchOption.AllDirectories)
{
dirFiles = Directory.EnumerateDirectories(path)
.SelectMany(x => EnumerateFiles(x, searchPattern, searchOpt));
}
return dirFiles.Concat(Directory.EnumerateFiles(path, searchPattern));
}
catch (UnauthorizedAccessException ex)
{
Console.WriteLine(ex.Message);
return Enumerable.Empty<string>();
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题是程序中的其他所有内容都是多线程的,并针对速度进行了优化.这是唯一一个严重阻碍我的领域.枚举网络共享中的文件可能需要几分钟.这是在Intranet上,我的机器和服务器之间有千兆位或更大的连接.
当我在运行时暂时将网络路径映射到驱动器时,我确实加快了速度.有什么办法可以让它变得更快吗?查看资源监视器,它几乎不使用任何CPU,内存或网络带宽.