使用ParallelForeach处理文件。这是最好的方法吗?

时间:2013-01-17 09:40:53

标签: c# multithreading task-parallel-library

只是一些建议 我有100.000+ xml文件要处理并移动到另一个系统。

这个概念非常简单我有一个循环:

    public void ProcessFiles()
    {
        IEnumerable<FileInfo> orderedFiles = GetFilesOrdered();

        foreach (FileInfo file in orderedFiles)
        {
            ProcessFile(file);
        }
    }

我一直在阅读有关任务并行库但没有那么自信。 不是那么强调线程。 似乎TPL包含了很多东西。

简单来说就是使用parallel.Foreach?

的情况

任何样本或建议

2 个答案:

答案 0 :(得分:0)

是的,它可能就像用foreach替换Parallel.ForEach一样简单。

您必须记住,多个线程现在将同时执行ProcessFile

因此,如果您要写入该方法中的任何共享状态,则必须使用同步构造来保护它。

如果您不熟悉多线程,那么您应该在这里阅读一本很棒的介绍性电子书:Albahari

答案 1 :(得分:0)

希望它对你有所帮助。简单的片段演示了如何并行移动文件。

        List<FileInfo> files = new List<FileInfo>();
        files.Add(new FileInfo("F:\\1.xml"));
        files.Add(new FileInfo("F:\\2.xml"));
        files.Add(new FileInfo("F:\\3.xml"));



        Parallel.ForEach(files, f =>
        {
            f.MoveTo("d:\\test\\" + f.Name); 
        });