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

本文关键字:读取 文本 文件 概念 任务 TPL | 更新日期: 2023-09-27 18:30:41

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

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

如果您使用的是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 时,请勿使用并行方法。

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

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