策略代码在开平仓信号条件成立时,需要去读取放在C盘的外部CSV文件用于逻辑计算,但CSV文件较大,导致回测非常慢。怎么样才能提高读取效率呢?
比如这个方法行不行?在on init里读取CSV文件,把CSV文件的每列数据都储存到相应的序列变量里去或者放到二维数组里去,ONBAR再从序列变量或者二维数组里去调取,这样的读取效率会有明显提升吗?
或者有没有其它可行的办法?
谢谢!
没用的。计算机的物理机制就是这样。
内存的出现就是因为去硬盘读数据太慢了才诞生的产物。内存本质是一种缓存,就是把计算过程中需要处理的数据暂时放在这个缓存里,模型运行中定义的所有变量容器都是在内存里,所以计算很快。
但是你只要从硬盘读取数据,那就一定慢。这个没办法的。
谢谢老师。我的想法是如果放在on init里去ReadCSVFile,只是初始化的时候读一次,然后把数据放到数组容器里,代码调用的时候直接从数组容器里取数,而不是ONBAR里每次都ReadCSVFile外部文件,这样也没法做更更快吗?
你这个做法呢,中国有个成语,叫朝三暮四。
理论上来说,本来是每次驱动读取一下硬盘,你现在放在oninit里读取,总的读取时间并不会减少,还多了从内存读取的时间。
不过我觉得,写代码本身是一种工程科学,与其问行不行,不如直接自己写一个demo测试效果到底如何,说不定实际结果跟理论是不一样的。
如果是我的话,当我产生了这个想法,有提问的这个时间,我可能已经在写demo测试速度了
Map比较好用?
Map?