我必须对包含数百万个文件的文件夹进行一些清理。最终,我想抓住这些文件,然后看看它们是否存在于数据库中。但是我需要先抓住这些文件,而不让程序窒息。获取数百万文件的文件夹中的第一个文件
我试着去使用
var file = Directory.GetFiles(uri, "*.*").FirstOrDefault();
的路线然而,这需要永远运行。由于文件的数量。
是否有更好的方法来抓取不会花费那么长时间的文件?
我必须对包含数百万个文件的文件夹进行一些清理。最终,我想抓住这些文件,然后看看它们是否存在于数据库中。但是我需要先抓住这些文件,而不让程序窒息。获取数百万文件的文件夹中的第一个文件
我试着去使用
var file = Directory.GetFiles(uri, "*.*").FirstOrDefault();
的路线然而,这需要永远运行。由于文件的数量。
是否有更好的方法来抓取不会花费那么长时间的文件?
是的,Directory.EnumerateFiles
是你在找什么。这将延迟加载您的文件,因此发出FirstOrDefault()
不会等待所有文件被读取。
从文档:
的EnumerateFiles和GetFiles的方法的区别如下:当您使用EnumerateFiles,你可以返回整个集合之前开始枚举名称的集合;当您使用GetFiles时,您必须等待返回数组之前返回整个名称数组。因此,当您使用许多文件和目录时,EnumerateFiles可以更高效。
除此之外 - 具有数百万个文件的文件夹只是一个坏主意。
这就是为什么你应该通过在子目录中批量分割你的文件。一个包含数百万个文件的目录是一个糟糕的主意。 –
除了使用已知文件的直接路径(或基于某种预测算法缩小搜索过滤器)之外,我没有看到更简单的方法。也许把它移到一个异步线程,这样它就不会锁定你的程序。一个建议是如果您需要多次运行该方法,请将这些文件加载到HashSet中。然后,您可以针对哈希集运行未来呼叫。 –
@LucasTrzesniewski相信我。我确定,因为他不想要这个。然而,我被解雇了。 – Prescient