C # Threading Parallel.ForEach и DirectoryInfo Исключение нехватки памяти - PullRequest
2 голосов
/ 30 марта 2012

У меня очень простой 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;
    }
}

Проблема в том, что у меня не хватает памяти, я думал о GC.Collect () после pjp.ProjectProcessorParallel.ForEach, но я не уверен, будет ли это работать.Каталоги очень большие, и я не уверен, что их очистка очень поможет.Что было бы хорошим способом справиться с этим?

1 Ответ

0 голосов
/ 30 марта 2012

Вызов GC вручную не поможет, так как GC должен вызываться автоматически перед выбрасыванием OutOfMemoryException.Одним из простых решений может быть компиляция приложения под x64.Это опция?

...