使用任务读取大量文本文件(TPL概念)

时间:2016-01-15 13:03:52

标签: c# task-parallel-library

我试图逐行读取大约300个文本文件,每个文件的大小为50到70 MB。我使用StreamReaderStreamWriter来读取和写入文件。目前我正在使用foreach循环进行迭代,并且需要8到10分钟来读取整个文件夹。 我是TPL概念的新手,并且不知道如何实现它来读取数百个文本文件的文件夹。任何人都可以通过提供一个代码片段来帮助我,该代码片段展示了如何使用任务更快地读取文件。

2 个答案:

答案 0 :(得分:1)

如果您使用的是HDD,这已经非常快了。

我认为你的瓶颈是IO。如果它是CPU(对文件进行一些大的操作),并且你有一个SSD,或任何其他媒介的访问时间可以忽略不计,我建议你也看看Parallel.ForEach

    Parallel.ForEach(files, (currentFile) => 
    {
        using (FileStream fs = File.Open(currentFile, FileMode.Open ))
        using (StreamReader sr = new StreamReader(fs))
        {
                string s;
                while ((s = sr.ReadLine()) != null)
                {
                    //do your stuff here
                }
        }
    });

在磁力机械硬盘上执行IO时,请勿使用Parallel方法。

答案 1 :(得分:0)

您可以创建多个任务并使用WaitAll方法等待所有任务完成。

List<Task> tasks = new List<Task>();
foreach (var file in someFileList)
{
   tasks.add(Task.Factory.StartNew(() =>
        {               
             ProcessFile(file);
        });
   );
}

Task.WaitAll(tasks.toArray());