C# 获取包含数百万个文件的文件夹中的第一个文件
我必须在一个有数百万个文件的文件夹上做些家务。最后,我想抓取这些文件,然后看看它们是否存在于数据库中。但我需要先抓取文件,不要让程序阻塞 我试着走使用的路线C# 获取包含数百万个文件的文件夹中的第一个文件,c#,C#,我必须在一个有数百万个文件的文件夹上做些家务。最后,我想抓取这些文件,然后看看它们是否存在于数据库中。但我需要先抓取文件,不要让程序阻塞 我试着走使用的路线 var file = Directory.GetFiles(uri, "*.*").FirstOrDefault(); 然而,这需要永远运行。因为文件太多了 有没有更好的方法来抓取不需要这么长时间的文件?是的,这就是您要寻找的。这将延迟加载文件,因此发出FirstOrDefault()不会等待读取所有文件 从文档中: EnumerateF
var file = Directory.GetFiles(uri, "*.*").FirstOrDefault();
然而,这需要永远运行。因为文件太多了
有没有更好的方法来抓取不需要这么长时间的文件?是的,这就是您要寻找的。这将延迟加载文件,因此发出FirstOrDefault()
不会等待读取所有文件
从文档中:
EnumerateFiles和GetFiles方法的区别如下:使用EnumerateFiles时,可以在返回整个集合之前开始枚举名称集合;使用GetFiles时,必须等待返回整个名称数组,然后才能访问该数组。因此,当您处理许多文件和目录时,枚举文件可以更有效
除此之外,拥有一个包含数百万文件的文件夹是一个坏主意。这正是你应该在子目录中分批分割文件的原因。一个目录包含数百万个文件是个坏主意。除了使用已知文件的直接路径(或者基于某种预测算法缩小搜索范围),我看不到更简单的方法。也许可以将它移动到异步线程,这样它就不会锁定您的程序。一个建议是,如果需要多次运行该方法,请将文件加载到哈希集中。然后你就可以在以后的通话中使用哈希集了。@Lucastzesniewski相信我。我当然不想这样。但是我被否决了,相信我。这是个可怕的主意。一个我不想也不想修的。但在解决这个问题上我被否决了。