作者niwat (原来如此)
看板Visual_Basic
标题[.NET] 如何加速大档案读取存入阵列的速度?
时间Wed Apr 28 11:03:56 2010
请输入专案类型(网站专案或者应用程式专案):应用程式专案
因为实验上的需要, 将仪器公司的档案export成txt file.这个txt file的格式如下:
## Parameter A = xxxx
## ...
.
.
.
以下是数据的部分(用,区隔时间与强度)
time,intensity
每个档案大约都超过100 MB
参考板上与网路上的的一些文件
使用以下的方法开档
Dim fileReader As System.IO.StreamReader
fileReader = My.Computer.FileSystem.OpenTextFileReader(TempFileName)
并且将资料放到阵列之中
Do
....
...
ReadTemp = Split(ReadTemp2, ",")
MassSpectraX(SpectraIndexNum - 1, SpectraDataNum) = ReadTemp(0)
MassSpectraY(SpectraIndexNum - 1, SpectraDataNum) = ReadTemp(1)
SpectraDataNum = SpectraDataNum + 1
DataNum = DataNum + 1
Loop
这个部分十分耗时, 导致完成一个档案读取与资料放置超过五分钟..
不知道有没有什麽方法可以加速这个过程..
以前曾经看过网路文章...似乎透过某种方法改写
SpectraDataNum = SpectraDataNum + 1这样累加的程序
可以减少记忆体开启移除的程序达到加速的目的...但我已经找不到那篇文章了
希望大家可以提供建议...感谢
补充说明:
仪器厂商提供原始档案是binary file但是储存的结构(structure)不明..
该仪器公司的软体可以将原本的binary file转成文字档
我希望可以写一个程式读取这些文字档, 并且进行图谱浏览以及後续积分等批次处理
目前功能上大致完成, 但是读档加上把图谱资料放进阵列速度缓慢
补充说明2:
如果先写一个程式批次将档案转成binary格式...
这部分的耗时可以忽略(放着跑)
然後用binary方式读取,这样会不会比较有效率?(快速浏览图谱)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 128.123.166.210
1F:推 meto000:改用Input(fileNum,time(Num),intensity(Num))会比较快吗? 04/28 11:52
2F:推 horngsh:可以用MemoryStream先将读到的DATA放进去用它当BUFFER较快 04/28 11:58
3F:→ niwat:使用MemoryStream是指..读档案时使用memorystream吗? 04/28 12:42
※ 编辑: niwat 来自: 128.123.166.210 (04/28 13:08)
4F:推 hateking:MemoryStream可以快多少@@? 最近我也在做类似的东西, 04/28 16:14
5F:→ hateking:不过大小顶多才10几M,所以还好 04/28 16:15
今天已经写到晃神了...所以还没有好好的试MemoryStream
我之前有写过类似的东西,但是因为Data Acquisition的部分也是自己写的
所以原始资料档就是Binary的...结构也是自己订的
30~50 MB的档案开启处理都还算快速(跟这次的程式比较)
可能是可以直接Buffer从抓位元数,存进阵列中
且数值本身暂的的大小也比文字模式小,加上不需要用split处理
所以会比较快吧?
也许会朝向把档案批次再转成binary格式的档案...
有结果後再分享....其间各位先进有任何建议请不吝与小弟分享
※ 编辑: niwat 来自: 68.35.0.83 (04/28 16:33)
6F:推 horngsh:回圈中尽可能不要放方法呼叫或较耗时的东西... 04/29 06:32