2

我有一个非常简单的 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() 但我不确定这是否可行。这些目录非常大,我不肯定清理这些目录会有所帮助。什么是处理这个问题的好方法?

4

1 回答 1

0

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

于 2012-03-30T13:28:28.357 回答