【发布时间】:2016-05-28 00:18:24
【问题描述】:
我正在使用这种方式读取巨大的 csv 文件(每个文件大约 350K 行):
StreamReader readFile = new StreamReader(fi);
string line;
string[] row;
readFile.ReadLine();
while ((line = readFile.ReadLine()) != null)
{
row = line.Split(';');
x=row[1];
y=row[2];
//More code and assignations here...
}
readFile.Close();
}
这里的重点是,每个月的每一天逐行读取一个大文件可能会很慢,我认为它必须是另一种更快的方法。
【问题讨论】:
-
任何方法都必须读取整个文件。
-
只是为了节省一些时间,我上次将
ReadLine()循环与基于缓冲区的自定义方法(没有创建字符串,而是将小值类型偏移大小对创建到缓冲区)与ReadAllLines()相比,ReadLine()循环排在首位。而是专注于优化您的处理。 -
小心使用
Split和ReadLine解析csv,因为如果数据中的引号中有分隔符或换行符,您将读取错误。使用类似 Microsoft.VisualBasic.FileIO.TextFieldParser 的东西更安全。 -
您能否更详细地描述您的任务:您需要所有行还是仅需要基于某种 id 列的特定行?您需要在 UI 上显示它并且可以逐页延迟加载还是需要处理整个文件?
标签: c# csv streamreader