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

标签 c# recursion out-of-memory fileinfo

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

start > ReadFiles(C:\music\);

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

   foreach(directory)
      ReadFiles(directory);
}

这工作正常,但在运行程序时,使用的内存量越来越大,最终我的系统内存不足。

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

最好的问候,Tys

最佳答案

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);
}

关于C# 如何在不使用大量内存的情况下递归循环大量文件夹和文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4240334/

相关文章:

c# - 更新 MongoDB 集合中的条目

c# - 如何从 C# 中的属性信息中获取引用

c++ - 极小极大递归究竟是如何工作的?

golang 中的递归在使用 goroutines、channels 和 sync.Waitgroup 时会产生死锁或负 WaitGroup 计数器

java - 如何在没有 OutOfMemory 错误的情况下从 Android 上传大文件?

Java新线程需要内存

java - 使用 ObjectInputStream#readUnshared() 时出现意外的 OutOfMemoryError

c# - 使用 Twitter API 1.1 oAuth 验证和请求用户的时间线

c# - 从 ExpressionTrees 获取值

c# - IndexOf 和序号字符串比较