我正在尝试获取特定目录中的文件列表,该目录包含超过2000万个文件,每个文件的大小为2到20 KB。
问题是我的程序每次都会抛出“内存不足”异常,而诸如robocopy之类的工具可以很好地将文件夹复制到另一个目录中,而没有任何问题。这是我用来枚举文件的代码:
List<string> files = new List<string>(Directory.EnumerateFiles(searchDir));
我该怎么做才能解决这个问题?任何帮助,将不胜感激。
您正在创建一个内存为2000万个对象的列表。我认为即使有可能,您也不会使用它。
而是使用Directory.EnumerateFiles(searchDir)
逐项迭代每个项目。
喜欢:
foreach(var file in Directory.EnumerateFiles(searchDir))
{
//Copy to other location, or other stuff
}
使用当前代码,您的程序将首先在内存中加载2000万个对象,然后您必须对其进行迭代或执行操作。
请参阅:Directory.EnumerateFiles方法(字符串)
EnumerateFiles和GetFiles方法的区别如下:使用EnumerateFiles时,可以在开始返回整个集合之前开始枚举名称集合;否则,您可以开始枚举名称集合。使用GetFiles时,必须等待返回整个名称数组,然后才能访问该数组。因此,当您处理许多文件和目录时,EnumerateFiles可能会更有效。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句