是否有可能避免在条件中出现许多 "或"(||)造成相同的动作? - 页 6

 
Meat:

borilunad,任何函数调用都会增加不必要的制动。因此,如果需要最大的速度,你应该摆脱所有的Request(),它执行的是单音节操作。 这同样适用于循环。 在循环中检查条件总是比只是一系列嵌套的if()慢得多

因此,即使是相互排斥的条件,用if(A || B || C || D)动作也会更好。

但我不能避免函数调用,因为我需要在这时检查大量的数据,这些数据包括在这些条件中。

我将继续我的实验,也许我将得到一些东西。但对传播没有控制!:)

 
一般来说,最快的选择是这样。
bool result;
if (A) result=true;
else
if (B) result=true;
else
if (C) result=true;
else
if (D) result=true;
else result=false;

if (result) Action();


然而,否则 result=false 一行最好与第一行结合起来,它不会影响速度。一般来说,如果A、B、C和D包含简单的条件(运算量最小,不需要调用所有的数学函数和其他东西),那么你不会从这样的优化中获得太多的性能提升(当然,除非这个结构运行数千万次)。 但是代码重载可能会很重要。

我在一个主题中写到,一切都必须合理处理。 出于某种原因,在我看来,你的代码充满了更重要的地方,对其进行优化确实会带来巨大的性能提升。 你应该从基本算法开始。 大多数新手在每个tick都 会对有关TS或未结订单的所有条件进行愚蠢的检查。但在大多数情况下,只检查边界条件就足够了,例如,当高点或低点达到某个值时,或出现新的柱状物时。 只有在这之后,你才能进行进一步的检查。

那么,除了与资源密集型的计算,你需要考虑将这些计算转移到DLL中。否则,在该死的MQL4中坐等13分钟(而你只需2-3分钟就能得到同样的结果)似乎是很不幸的:)

 
Meat:
一般来说,最快的选择是这样。

然而,否则 result=false 一行最好与第一行结合起来,它不会影响速度。一般来说,如果A、B、C和D包含简单的条件(运算量最小,没有调用所有的数学函数和其他东西),那么你不会从这样的优化中获得太多的性能提升(当然,除非这个结构运行数千万次)。 但代码重载可能会很重要。

我在一个主题中写到,一切都必须合理处理。 出于某种原因,在我看来,你的代码充满了更重要的地方,对其进行优化确实会带来巨大的性能提升。 你应该从基本算法开始。 大多数新手在每个tick都会对有关TS或未结订单的所有条件进行愚蠢的检查。但在大多数情况下,只检查边界条件就足够了,例如,当高点或低点达到某个值时,或出现新的柱状物时。 只有在这之后,你才能进行进一步的检查。

那么,除了与资源密集型的计算,你需要考虑将这些计算转移到DLL中。否则,在该死的MQL4中坐等13分钟(而你只需2-3分钟就能得到同样的结果)似乎是很不幸的:)

最快的方案是由Paco建议的
 
tara:
最快的方案是由Paco建议的

你真的认为每次对几个值进行求和(即进行不必要的算术运算)会更快吗? 在我的变体中,检查在第一次匹配时结束,而在你提到的变体中,只有在对所有值进行求和后才会检查。

此外,该变体需要提前计算所有条件。那么,我们在这里谈论的是什么样的速度?这是最慢的选择。

 
和开关--案例不是一个好主意?
 

如果你想加快速度,你可以试试位操作

也就是说,让所有的变量都是int类型的(false=0)。那么按位数计算,A|B|C...>0

 
Avals:

如果你想加快速度,你可以试试位操作。

也就是说,让所有的变量都是int类型的(false=0)。那么按位数计算,A|B|C...>0

这一切有什么意义呢? 就像求和一样,所有的条件都必须预先计算。 如果只有一个条件就足够了,为什么还要全部计算呢?
 

而没有人会检查建议的变体的执行速度?

你可以使用这里 的脚本

 
Meat:
一般来说,最快的选择是这样。

然而,否则 result=false 一行最好与第一行结合起来,它不会影响速度。一般来说,如果A、B、C和D包含简单的条件(运算量最小,不需要调用所有的数学函数和其他东西),那么你不会从这样的优化中获得太多的性能提升(当然,除非这个结构运行数千万次)。 但是代码重载可能会很重要。

我在一个主题中写到,一切都必须合理处理。 出于某种原因,在我看来,你的代码充满了更重要的地方,对其进行优化确实会带来巨大的性能提升。 你应该从基本算法开始。 大多数新手在每个tick都会对有关TS或未结订单的所有条件进行愚蠢的检查。但在大多数情况下,只检查边界条件就足够了,例如,当高点或低点达到某个值时,或出现新的柱状物时。 只有在这之后,你才能进行进一步的检查。

那么,除了与资源密集型的计算,你需要考虑将这些计算转移到DLL中。否则,在他妈的MQL4中坐等13分钟是很不幸的(尽管我们可能在2-3分钟内得到同样的结果)。

if (A) Action();
 else
  if (B) Action();
   else
    if (C) Action();
     else
      if (D) Action();

这样就更快了。

我记得一个故事。

"在一次公司董事会会议上,有两个问题。

1.决定建立一个同步相位仪。

2.决定为员工建造一个自行车停车场。

关于第一个问题,讨论持续了1分钟。

2日,辩论持续了2个多小时"。

 
谁不喜欢 "他妈的MQL4",不如去跑步,跑步。因为不清楚他在这里做了什么。尽管这个账户有所有的优点和古老性。