首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VB Dotnet >

vb.net读取较大文本文件的有关问题

2012-02-23 
vb.net读取较大文本文件的问题我现在正在做一个文本数据处理的程序,主要的任务是把采集后的文本文件数据读

vb.net读取较大文本文件的问题
我现在正在做一个文本数据处理的程序,
主要的任务是把采集后的文本文件数据读出,并绘制曲线图。
该文本文件大小约180M,包含大约30,000,000行数据,每个数据独占一行。

此前,我试过采用常用的ReadLine方法,读取全部数据:

  Do While True
  FrictionData(i) = SR(0).ReadLine
  If FrictionData(i) = Nothing Then Exit Do '读到文件尾则退出
  i+= 1
  Loop

但是,由于文件较大(显然小文件不是问题),读取的时间比较长(本机上超过40s),而在另一台机器(研华工控机,P4+512RAM)上运行,则程序完全无法进行,观察发现内存过耗。

现在的问题是:

1.必须将全部的文件数据处理完,至少把所有数据的均值求出来;且这一目标要在那台研华的老机器上实现;
2.需要将文件的数据按需要(比如选择某一段,若干个数据)显示成图线。

  关于问题1,我试过“先读部分文件求均值,再释放内存”的方法反复执行,直到文件读取完。不过,性能没有明显改观。而且,这种做法存在数值误差(不是真正的全部相加后求均值)。而全部读入内存进行计算又因内存过小而很难完成。我查过使用“文件映射”方法处理大文件的一些资料,但是,限于认识水平,不知道在VB.NET下该如何编写。
  关于问题2,最初我想用“读到指定行”的方法来完成,但发现任务量仍然偏大,因为要读取某一位置的内容,似乎需要将这一位置之前的行全部读完,不知道VB.NET中还有没有更为方便直接的手段。
  是不是采用ACCESS来管理会更好些?

望知情的朋友就上面两个问题能给我一些提示,不胜感激!


[解决办法]
用数据库建索引后处理当然要好些.
建议:
1、分块读,如1次1M大小的读。100M的也很大的。一次读进来你的内存再大也会受不了的。
不明白你说的反复执行误差问题,难道不能等所有分块全部读完了再计算均值?不能单独对分块进行相加得和值吗?
180M也就分为约180份,计算每块暂存一些中间变量到最后尾块再计算结果不行吗?
2、建索引,就是对单个文件建索引,每行(每条记录)一个索引值。这样可以“读到指定行”,且处理不用全部读完。

[解决办法]
可以考虑用数据库的方法来实现,先导入到数据库中,然后利用数据库求出值。
还有一个问题不解:既然是要求什么平均值,为什么不计数,然后计算一个总和?这样结果不就不存在问题了吗?

热点排行