C# 线程处理 Parallel.ForEach 和 DirectoryInfo 内存不足异常

标签 c# multithreading directoryinfo

我有一个非常简单的 Parallel.ForEach 调用下面的代码:

var maxDegree = new ParallelOptions{MaxDegreeOfParallelism = 5};
Parallel.ForEach(PList,maxDegree,fl =>
            {
                ProjectDirectoryProcessing pjp = new ProjectDirectoryProcessing();
                pjp.ProjectProcessor(fl);
                Console.ReadLine();
            }
        );

public class ProjectDirectoryProcessing
{

    public void ProjectProcessor(string rootDirectory)
    {
           DirectoryInfo Dinfo = new DirectoryInfo(rootDirectory);
            DirectoryInfo[] directories = Dinfo.GetDirectories("*.*", SearchOption.AllDirectories);
            FileInfo[] finfo = Dinfo.GetFiles("*.*", SearchOption.AllDirectories);
            foreach (FileInfo f in finfo)
            {
                FileSize = FileSize + f.Length;
            }
            FileCount = finfo.Length;
            DirectoryCount = directories.Length;
    }
}

问题是我内存不足,我考虑过在 Parallel.ForEach 中的 pjp.ProjectProcessor 之后使用 GC.Collect(),但我不确定这是否可行。目录非常大,我不确定清理这些目录会有多大帮助。处理此问题的好方法是什么?

最佳答案

手动调用 GC 不会有帮助,因为 GC 应该在抛出 OutOfMemoryException 之前自动调用。 一种简单的解决方案是将应用程序编译为 x64。这是一个选项吗?

关于C# 线程处理 Parallel.ForEach 和 DirectoryInfo 内存不足异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9943762/

相关文章:

android - 从 iOS 中的 ([self performSelectorOnMainThread]) 等非 Activity 对象访问 UI-Thread

c# - 为什么这个 DirectoryInfo 比较不起作用?

c# - 路径中的 @"../.."是什么意思?

c# - 第二次重命名目录锁重命名的目录我要重命名

c# - 如何为 JQuery 插件创建静态方法

c# - 如何将 json 数据合并到数组中,但在几分钟内聚合数据?

java - 使用 JNA native 等待调用检测线程中断 (Windows)

C# EventHandler 文档代码示例

c# - async-await 的延续爆发——表现不同?

c# - 为什么我必须使用(async method).result而不是await(async method)?