C#如何在不使用大量内存的情况下递归循环大量文件夹和文件

Tys*_*Tys 3 c# recursion out-of-memory fileinfo

我想索引我的所有音乐文件并将它们存储在数据库中.我有这个功能,我从音乐驱动器的根开始重复调用.

start > ReadFiles(C:\music\);

ReadFiles(path){
   foreach(file)
      save to index;

   foreach(directory)
      ReadFiles(directory);
}
Run Code Online (Sandbox Code Playgroud)

这工作正常,但在运行程序时,使用的内存量会增长和增长,最后我的系统内存不足.

有没有人有更好的方法,不需要4GB的RAM来完成这项任务?

最诚挚的问候,Tys

Tho*_*que 9

Alxandr基于队列的解决方案应该可以正常工作.

如果您使用的是.NET 4.0,您还可以利用新Directory.EnumerateFiles方法,该方法可以懒惰地枚举文件,而无需将它们全部加载到内存中:

void ReadFiles(string path)
{
    IEnumerable<string> files =
        Directory.EnumerateFiles(
            path,
            "*",
            SearchOption.AllDirectories); // search recursively

    foreach(string file in files)
        SaveToIndex(file);
}
Run Code Online (Sandbox Code Playgroud)

  • 这是一个很好的答案,但它仍然无法解决根本问题 - 如果你遇到内存问题,必须坚持太多内存. (2认同)