我正在尝试获取特定目录中的文件列表,其中包含超过 2000 万个文件,每个文件大小从 2 KB 到 20 KB 不等。
问题是我的程序每次都会抛出内存不足异常,而像 robocopy 这样的工具可以很好地将文件夹复制到另一个目录,没有任何问题。这是我用来枚举文件的代码:
List<string> files = new List<string>(Directory.EnumerateFiles(searchDir));
我应该怎么做才能解决这个问题?
任何帮助,将不胜感激。
您正在内存中创建一个包含 2000 万个对象的列表。我认为你永远不会使用它,即使它成为可能。
相反使用Directory.EnumerateFiles(searchDir)
并逐项迭代。
like:
foreach(var file in Directory.EnumerateFiles(searchDir))
{
//Copy to other location, or other stuff
}
使用您当前的代码,您的程序将首先在内存中加载 2000 万个对象,然后您必须对它们进行迭代或执行操作。
See: Directory.EnumerateFiles 方法(字符串) https://msdn.microsoft.com/en-us/library/dd383458(v=vs.110).aspx
EnumerateFiles 和 GetFiles 方法的区别如下:
使用EnumerateFiles,可以开始枚举集合
返回整个集合之前的名称;当你使用
GetFiles,必须等待返回整个名称数组
在您可以访问该数组之前。因此,当您与
对于很多文件和目录,EnumerateFiles 可以更加高效。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)