关于MQL4的问题 - 页 12

 
唯一的问题是,будет ли работать заметно быстрее, если обработку массивов вынести в DLL?
,有人安装了任何编译器吗?请检查!是不是很无聊?


阵列访问的速度比局部变量慢十倍。


寻址一个数组项 的时间总是不比寻址一个变量的时间长。不同的编译器的具体数字会有所不同,但这个趋势应该是成立的。编译器是Visual Studio 2005。处理器是Athlon XP 2500+。执行时间与阵列初始化一起为1.06-1.07秒。




Dim t1, t2 As Double t1 = DateAndTime.Timer() Dim x, y, z As Double Dim d, k As Double Dim Open(5001), Close(5001) As Double For d = 5000 To 1 Step -1 For k = 1 To 4999 z = Close(k) : y = Close(k + 1) : x = Close(k + 2) z = Open(k) : y = Open(k + 1) : x = Open(k + 2) Next Next t2 = DateAndTime.计时器() MsgBox(CStr(t2 - t1) + " 秒")



同样的循环,但有

z = Close(1) : y = Close(1) : x = Close(1) z = Open(1) : y = Open(1) : x = Open(1)


给出了0.37至0.4秒。最后,


z = k : y = k : x = k z = k : y = k : x = k


0,56-0,6 с.因此,我想得出以下结论: ,


不是关于编译器,也不是关于 "数组/非数组",而是关于正确的数据结构和正确的代码!
P.S. 当然,以上所有的论述,除了时间测量之外,都是我个人的,深深的主观和谦虚的意见,只是作为一个程序员。

 
谢谢!

是的,在编译器中对结果代码的优化毕竟是一种能力。
我不想谈细节,但似乎visual studio copiler会自己优化数组访问。
为了使测试公平,你需要输入一个变量,比如,S;并在所有的x,y,z任务之间插入类似S=S+x, S=S+y, S=S+z的东西,然后除了时间之外输出S以获得 "纯 "速度。

,尽管编译器优化器可以部分地找出这种欺骗...:)
 
以确保测试的完整性,我们需要引入一个变量


我早就摒弃了这种想法。我甚至做了测试。而且我得出了一个结论。

编译器执行了所有规定的操作,而且根本没有权利 不执行这些操作,因为根本不可能100%知道我打算从哪里访问这些变量--在同一个方法中,从某个定时器(和结构上不相关的代码),甚至从某个其他进程中。
所以,一切都很公平。已检查。

P.S. Offtopics,对不起。忍不住了。
 
关于数组访问...
ArrayCopySeries 中参数指定的数组是什么?

它是一个普通的数值数组,还是一个指向数值的指针数组?

(这显然是一个愚蠢的问题,但我已经10年没有编程了,更不用说用C语言了,更不用说在Windows上编程了。)

,在哪里可以读到这些内容?
 
有什么方法可以确定EA的启用按钮 在两次跳动之间的状态 吗?
我真的需要...

是否有任何方法可以...我不知道。是否允许递归调用start()?
 
那么,当按钮被关闭时,是不是就会触发deinit()?
 
有什么方法可以确定EA的启用按钮在两次跳动之间的状态吗?<br / translate="no">

没有办法。如果按钮被禁用,EA将不会启动。

是否允许对start()的递归访问?

是允许的。
 
Slawa,
谢谢你的答复。


好吧,呃...那么现在呢......?
我不知道......或去5个,但昨天......和今天的3个......小的。

我不得不满足于很多小的。我不想这样做。那么,现在怎么办......:(
这似乎很容易...

(别管我,它的冥想已经溅到了键盘上)
 
FirstVisibleBar()和BarsPerWindow()在ME中没有用颜色突出显示。
是我的问题,还是应该是这样的?
 
FirstVisibleBar()和BarsPerWindow()在ME中没有用颜色突出显示。<br / translate="no"> 是我的问题还是应该这样?

它们现在是,而且一直是正常突出的。刚刚检查了183号文件和187号文件。