前面说到,Julia的Array很强大,但是,Julia的索引是副本copy,如果次数多,会引发内存占用积累上升,最后影响程序运行速度。
在0.4版本前,主要是通过ArrayViews.jl库的view,或用sub(),slice()等方法,降低这个内存占用的情况。
我用SQLite.jl取SQLite数据库,我用的是0.3.6版本,由于SQLite.jl取出来的是ResultSet类型,大约是一个包含Array的复合类型,我需要转化成Dict{AsciiString,Dict{Date,Array{kbarData}}}的数据接口类型。其中,就需要对ResultSet的对象进行不断的索引取值(Data[i,j]).
我做了一些实验,比如cu, 我看了一下,有395万条数据,是2010-2014年,五年的期货一分钟的数据。
由于索引取值是副本的copy, 在目前的情况下,导致内存占用上升至近2G水平。
花时情况大约时:从数据库取到ResultSet花时19秒左右;
至我再把ResultSet转化为Matrix类型,共花时33秒左右(转换花14秒);
至转化成我的接口数据类型,从数据库至接口数据花时共46秒左右。
其实,本来,不到400万条数据,我认为在1G左右可能更正常一些。
最麻烦的是,这个内存占用暂时还没有办法(我没有找到)消下去,一直在堆中堆积着。
据说,0.4版本后,会改变副本copy的情况,同时期望速度上有所提升!
0.4版本还会把库导入的时间大大缩短!
.......
期待中!