使用任务(TPL 概念)读取大量文本文件
本文关键字:读取 文本 文件 概念 任务 TPL | 更新日期: 2023-09-27 18:30:41
我正在尝试逐行读取大约 300 个文本文件,每个文件的大小为 50 到 70 MB。我正在使用StreamReader
和StreamWriter
来读取和写入文件。目前我正在使用foreach
循环进行迭代,读取整个文件文件夹需要 8 到 10 分钟。我是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());