我一直面临着制作一种将非常大的文本文件读入程序的方法的挑战,这些文件的范围可以从 2gb 到 100gb。
到目前为止,我们的想法是在该方法中读取 1000 行文本。
目前,使用流式阅读器设置程序,逐行读取文件并处理在该行上找到的必要数据区域。
using (StreamReader reader = new StreamReader("FileName"))
{
string nextline = reader.ReadLine();
string textline = null;
while (nextline != null)
{
textline = nextline;
Row rw = new Row();
var property = from matchID in xmldata
from matching in matchID.MyProperty
where matchID.ID == textline.Substring(0, 3).TrimEnd()
select matching;
string IDD = textline.Substring(0, 3).TrimEnd();
foreach (var field in property)
{
Field fl = new Field();
fl.Name = field.name;
fl.Data = textline.Substring(field.startByte - 1, field.length).TrimEnd();
fl.Order = order;
fl.Show = true;
order++;
rw.ID = IDD;
rw.AddField(fl);
}
rec.Rows.Add(rw);
nextline = reader.ReadLine();
if ((nextline == null) || (NewPack == nextline.Substring(0, 3).TrimEnd()))
{
d.ID = IDs.ToString();
d.Records.Add(rec);
IDs++;
DataList.Add(d.ID, d);
rec = new Record();
d = new Data();
}
}
}
该程序继续进行并填充一个类。(只是决定不发布其余部分)
我知道一旦程序显示一个非常大的文件,就会出现内存异常错误。
所以这是我目前的问题,到目前为止,我一直在谷歌搜索几种方法,很多人只是回答使用流阅读器和 reader.readtoend,我知道 readtoend 对我不起作用,因为我会得到那些内存错误。
最后,我一直在研究 async 作为一种创建方法的方法,该方法将读取一定数量的行并在处理下一行之前等待调用。
这给我带来了我的问题,我正在努力理解异步,我似乎找不到任何可以帮助我学习的材料,并希望这里有人可以帮助我理解异步。
当然,如果有人知道解决这个问题的更好方法,我会全力以赴。
编辑添加了代码的其余部分以结束任何混乱。