[英]C# Threading Parallel.ForEach and DirectoryInfo Out of Memory Exception
我有一个非常简单的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将无济于事,因为应该在引发OutOfMemoryException之前自动调用GC。 一种简单的解决方案是将应用程序编译为x64。 这是一个选择吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.