巴解组织的辉煌与贫穷 - 页 7

 

找到了!毕竟设法用PLO获得了更高的速度。是的!其好处是不可否认的。


 
dimeon:

那我们就用汇编语言写一切吧。反正会更快。

我不明白这个问题。我从来没有见过一个专家顾问或指标有1MB的代码。

任何函数的调用也需要一些时间。让我们也放弃功能吧!

使用OOP,对大型项目的控制就更加方便了。

另外,代码的执行速度很多时候并不像对经纪人的ping时间和对经纪人订单的响应那样关键。

看看HFT的算法吧。他们需要最大的速度,但你不会发现那里有任何复杂的计算。

PS。你通常不需要一辆超级跑车或雪地车来从A点到B点,一辆轻便摩托车就足够了!一辆轻便摩托车就够了!

这里有一个人把代码写到文件里,并包括它而不是一个函数。
 
Integer:

找到了!还是设法用PLO获得了更高的速度。是的!其好处是不可否认的。

那么密码是什么?
 
meat:
那么,密码是什么?
用不同的参数数调用iCustom(),每个参数数有不同的情况,或者OOP变体中每个参数数有不同的类。
 

在MQL编译器的新版本中,如果一个虚拟方法是一连串虚拟方法中的最后一个方法,并且没有与外部库的链接,我们已经包含了用直接调用来替换虚拟方法的优化。

这种方法将简化和加快对许多与类合作的程序的虚拟调用。

670建设中第一个帖子中test.mq4例子的结果。

switch: 172
OOP:    312

循环必须从10,000,000增加到50,000,000,以便不在32-64毫秒的微不足道的时间测量下工作。时间以ms为单位显示,数字越小,代码越快。

这是我在同一代码上使用新的编译器得到的结果。

switch: 157
OOP:     93

OOP赢得了轰轰烈烈的胜利。但为什么呢?

首先,虚拟方法被转化为普通方法,然后对其进行精简和优化为零。事实上,函数调用主体 完全消失了,只剩下一个纯循环。

  mov     int[i] <- int[0]

$label:
                                        <- тут когда-то было тело, но оно оптимизировалось в ноль
  add     int[i] <- int[i], int[1]
  jlt     int[i], int[50000000] --> $label

文件附在后面,包括控制台编译器的新测试版。你可以用MetaEditor的常规670版本(编译器内置在其中)和控制台编译器来比较任何例子。


这证明了什么。

  1. 正在测试的是编译器优化器的质量。
  2. 编写测试时其实应该充分了解一切的优化方式
  3. 正如我所说的--在一个现有的例子中展示了如果你不了解代码优化的特殊性,那么就有可能被误导(OOP突然获胜)。
附加的文件:
test.mq4  9 kb
Test.ex4  7 kb
mql_exe.zip  1117 kb
原因: