我有超过20个文件,每个文件包含近100万行(5千兆字节),我需要加快读取过程,所以我试图并行读取这些文件,但它需要比按顺序阅读它们。是否有任何方法可以并行读取非常大的文件?
Parallel.ForEach(sourceFilesList, filePath =>
{
if (!string.IsNullOrEmpty(filePath) && File.Exists(filePath))
{
StreamReader str = new StreamReader(filePath);
while (!str.EndOfStream)
{
var temporaryObj = new object();
string line = str.ReadLine();
// process line here
}
}
});
答案 0 :(得分:3)
最好将缓冲读卡器用于大文件。这样的事情会有所帮助。
using (FileStream fs = File.Open(path, FileMode.Open, FileAccess.Read,
FileShare.ReadWrite))
using (BufferedStream bs = new BufferedStream(fs))
using (StreamReader sr = new StreamReader(bs))
{
string line;
while ((line = sr.ReadLine()) != null)
{
}
}
为什么BufferedStream更快
缓冲区是内存中用于缓存数据的字节块,从而减少了对操作系统的调用次数。缓冲区可提高读写性能。缓冲区可用于读取或写入,但不能同时使用。 BufferedStream的Read和Write方法自动维护缓冲区。
答案 1 :(得分:1)
它的IO操作,建议是使用Async / Await,如下所示(大多使用ReadAsync
函数,这有助于异步读取),Async / Await使用你{{1}有效率。
Machine Physical Core