我有一个非常简单的 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/