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