C#读取二进制文件,解析并做一定分析,但是读取很慢,有没有什么号方法?文件4M左右。 20
很可惜没有一个好的回答,现在的知道真的只能问些无聊的问题了。读取的时候大概要1分钟,可能是要写入datagridview的原因,目前没啥好的想法。关于后期的数据处理可以用...
很可惜没有一个好的回答,现在的知道真的只能问些无聊的问题了。读取的时候大概要1分钟,可能是要写入datagridview的原因,目前没啥好的想法。关于后期的数据处理可以用多线程来搞,之前卡住的原因是在主线程对datagridview.rows进行visible的操作,所以就无论怎么搞都还是那么慢,后来把那部分注释掉立刻好转。暂时就这样搞的,欢迎大家有想法与我交流。
展开
3个回答
2016-07-19
展开全部
这是个二进制文件,用低级函数读写。建议先用ultraedit打开,把里面的结构搞清楚,例如那一段是股票代号,哪一段是名称,哪一段价格。第二步:读写流。读写二进制文件用System.IO.BinaryReader和System.IO.BinaryWriter类;你同样要分析数据格式。特别day文件里的日期,我是老早搞过,现在都忘了。里面的日期好像还要换算。day文件里存储的是一段时期的每天价格。这个好像很好分析的。原来用delphi编过,刚才找没找到,可能被老婆给删除了。这个给你参考:一、数据文件和数据结构:大智慧数据文件和数据结构:(假设大智慧股票行情软件安装在D:dzh目录下)上海日线存储路径为:D:dzhDATASHaseDay,文件扩展名为:.day上海周线存储路径为:D:dzhDATASHaseweek,文件扩展名为:.wek上海月线存储路径为:D:dzhDATASHasemonth,文件扩展名为:.mnt深圳日线存储路径为:D:dzhDATASZnseDay深圳周线存储路径为:D:dzhDATASZnseweek深圳月线存储路径为:D:dzhDATASZnsemonth周线,月线格式与日线格式一致.以深发展日线为例:1A76:0100D6CD2F0152070100-52070100520701001A76:011052070100860F0000-4D020000000000001A76:01200000000000000000-D7CD2F01600301001A76:01306003010060030100-60030100820500001A76:0140D400000000000000-0000000000000000每一条记录的长度为40字节:1-4字节为日期,D6CD2F01转换为十进制是:199101025-8字节=开盘价(元)*10009-12字节=最高价(元)*100013-16字节=最低价(元)*100017-20字节=收盘价(元)*100021-24字节=成交金额(元)/100025-28字节=成交量(手)其余12字节未使用实现步骤:1、先定义日线数据结构数组2、再以实际记录数分配动态数组空间3、然后把数据读入相应数组中日线数据放在:%app_dir%\DATA\SHase\Day(上证A股)以及%app_dir%\DATA\SZnse\Day(深圳A股)#pragmaoncestructDZH5Day{unsignedlongdate;//date的格式:20070423unsignedlongopen;//开盘价unsignedlonghigh;//最高价unsignedlonglow;//最低价unsignedlongclose;//收盘价unsignedlongmoneysum;//成交金额unsignedlongturnover;//成交数量charunused[12];//保留};整个结构共40个字节,读者可以查看所有的日线文件,大小肯定是40的倍数这样很容易读出相应的数据:如:FILE*pFile=fopen("600001.day","rb");if(NULL!=pFile){while(!feof(pFile)){DZH5DaydayK;fread(&dayK,sizeof(DZH5Day),1,pFile);}}-------------------------------------------------------------------------------------------------------
展开全部
楼主问题解决了吗
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2016-07-19
展开全部
才4M,应该是根本感觉不到读取时间才对的。
你确定时间是消耗在文件读取上了吗?
你确定时间是消耗在文件读取上了吗?
更多追问追答
追问
不确定啊,因为读取和解析是一起的,读取之后立刻存到数组里然后按照一定规则解析放入datagridview里。
追答
你可以用 Stopwatch 计个时,看看时间是消耗在哪个步骤。
我不太相信是系统IO读取慢,才4M大小,这不科学。
确定了“耗时大户”才能有的放矢的进行针对性调整。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询