是否有可能避免在条件中出现许多 "或"(||)造成相同的动作? - 页 6 12345678910 新评论 Boris 2013.02.11 18:05 #51 Meat: borilunad,任何函数调用都会增加不必要的制动。因此,如果需要最大的速度,你应该摆脱所有的Request(),它执行的是单音节操作。 这同样适用于循环。 在循环中检查条件总是比只是一系列嵌套的if()慢得多 因此,即使是相互排斥的条件,用if(A || B || C || D)动作也会更好。 但我不能避免函数调用,因为我需要在这时检查大量的数据,这些数据包括在这些条件中。 我将继续我的实验,也许我将得到一些东西。但对传播没有控制!:) Alexey Navoykov 2013.02.11 22:23 #52 一般来说,最快的选择是这样。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分钟就能得到同样的结果)似乎是很不幸的:) Алексей Тарабанов 2013.02.11 22:42 #53 Meat: 一般来说,最快的选择是这样。 然而,否则 result=false 一行最好与第一行结合起来,它不会影响速度。一般来说,如果A、B、C和D包含简单的条件(运算量最小,没有调用所有的数学函数和其他东西),那么你不会从这样的优化中获得太多的性能提升(当然,除非这个结构运行数千万次)。 但代码重载可能会很重要。 我在一个主题中写到,一切都必须合理处理。 出于某种原因,在我看来,你的代码充满了更重要的地方,对其进行优化确实会带来巨大的性能提升。 你应该从基本算法开始。 大多数新手在每个tick都会对有关TS或未结订单的所有条件进行愚蠢的检查。但在大多数情况下,只检查边界条件就足够了,例如,当高点或低点达到某个值时,或出现新的柱状物时。 只有在这之后,你才能进行进一步的检查。 那么,除了与资源密集型的计算,你需要考虑将这些计算转移到DLL中。否则,在该死的MQL4中坐等13分钟(而你只需2-3分钟就能得到同样的结果)似乎是很不幸的:) 最快的方案是由Paco建议的 Alexey Navoykov 2013.02.11 23:12 #54 tara: 最快的方案是由Paco建议的 你真的认为每次对几个值进行求和(即进行不必要的算术运算)会更快吗? 在我的变体中,检查在第一次匹配时结束,而在你提到的变体中,只有在对所有值进行求和后才会检查。 此外,该变体需要提前计算所有条件。那么,我们在这里谈论的是什么样的速度?这是最慢的选择。 Alexandr Krivoshey 2013.02.12 03:04 #55 和开关--案例不是一个好主意? Avals 2013.02.12 04:21 #56 如果你想加快速度,你可以试试位操作。也就是说,让所有的变量都是int类型的(false=0)。那么按位数计算,A|B|C...>0 Alexey Navoykov 2013.02.12 05:45 #57 Avals: 如果你想加快速度,你可以试试位操作。 也就是说,让所有的变量都是int类型的(false=0)。那么按位数计算,A|B|C...>0 这一切有什么意义呢? 就像求和一样,所有的条件都必须预先计算。 如果只有一个条件就足够了,为什么还要全部计算呢? Victor Nikolaev 2013.02.12 05:45 #58 而没有人会检查建议的变体的执行速度?你可以使用这里 的脚本 Igor Chemodanov 2013.02.12 06:12 #59 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个多小时"。 Рустам 2013.02.12 08:08 #60 谁不喜欢 "他妈的MQL4",不如去跑步,跑步。因为不清楚他在这里做了什么。尽管这个账户有所有的优点和古老性。 12345678910 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
borilunad,任何函数调用都会增加不必要的制动。因此,如果需要最大的速度,你应该摆脱所有的Request(),它执行的是单音节操作。 这同样适用于循环。 在循环中检查条件总是比只是一系列嵌套的if()慢得多
因此,即使是相互排斥的条件,用if(A || B || C || D)动作也会更好。
但我不能避免函数调用,因为我需要在这时检查大量的数据,这些数据包括在这些条件中。
我将继续我的实验,也许我将得到一些东西。但对传播没有控制!:)
然而,否则 result=false 一行最好与第一行结合起来,它不会影响速度。一般来说,如果A、B、C和D包含简单的条件(运算量最小,不需要调用所有的数学函数和其他东西),那么你不会从这样的优化中获得太多的性能提升(当然,除非这个结构运行数千万次)。 但是代码重载可能会很重要。
我在一个主题中写到,一切都必须合理处理。 出于某种原因,在我看来,你的代码充满了更重要的地方,对其进行优化确实会带来巨大的性能提升。 你应该从基本算法开始。 大多数新手在每个tick都 会对有关TS或未结订单的所有条件进行愚蠢的检查。但在大多数情况下,只检查边界条件就足够了,例如,当高点或低点达到某个值时,或出现新的柱状物时。 只有在这之后,你才能进行进一步的检查。
那么,除了与资源密集型的计算,你需要考虑将这些计算转移到DLL中。否则,在该死的MQL4中坐等13分钟(而你只需2-3分钟就能得到同样的结果)似乎是很不幸的:)
一般来说,最快的选择是这样。
然而,否则 result=false 一行最好与第一行结合起来,它不会影响速度。一般来说,如果A、B、C和D包含简单的条件(运算量最小,没有调用所有的数学函数和其他东西),那么你不会从这样的优化中获得太多的性能提升(当然,除非这个结构运行数千万次)。 但代码重载可能会很重要。
我在一个主题中写到,一切都必须合理处理。 出于某种原因,在我看来,你的代码充满了更重要的地方,对其进行优化确实会带来巨大的性能提升。 你应该从基本算法开始。 大多数新手在每个tick都会对有关TS或未结订单的所有条件进行愚蠢的检查。但在大多数情况下,只检查边界条件就足够了,例如,当高点或低点达到某个值时,或出现新的柱状物时。 只有在这之后,你才能进行进一步的检查。
那么,除了与资源密集型的计算,你需要考虑将这些计算转移到DLL中。否则,在该死的MQL4中坐等13分钟(而你只需2-3分钟就能得到同样的结果)似乎是很不幸的:)
最快的方案是由Paco建议的
你真的认为每次对几个值进行求和(即进行不必要的算术运算)会更快吗? 在我的变体中,检查在第一次匹配时结束,而在你提到的变体中,只有在对所有值进行求和后才会检查。
此外,该变体需要提前计算所有条件。那么,我们在这里谈论的是什么样的速度?这是最慢的选择。
如果你想加快速度,你可以试试位操作。
也就是说,让所有的变量都是int类型的(false=0)。那么按位数计算,A|B|C...>0
如果你想加快速度,你可以试试位操作。
也就是说,让所有的变量都是int类型的(false=0)。那么按位数计算,A|B|C...>0
而没有人会检查建议的变体的执行速度?
你可以使用这里 的脚本
一般来说,最快的选择是这样。
然而,否则 result=false 一行最好与第一行结合起来,它不会影响速度。一般来说,如果A、B、C和D包含简单的条件(运算量最小,不需要调用所有的数学函数和其他东西),那么你不会从这样的优化中获得太多的性能提升(当然,除非这个结构运行数千万次)。 但是代码重载可能会很重要。
我在一个主题中写到,一切都必须合理处理。 出于某种原因,在我看来,你的代码充满了更重要的地方,对其进行优化确实会带来巨大的性能提升。 你应该从基本算法开始。 大多数新手在每个tick都会对有关TS或未结订单的所有条件进行愚蠢的检查。但在大多数情况下,只检查边界条件就足够了,例如,当高点或低点达到某个值时,或出现新的柱状物时。 只有在这之后,你才能进行进一步的检查。
那么,除了与资源密集型的计算,你需要考虑将这些计算转移到DLL中。否则,在他妈的MQL4中坐等13分钟是很不幸的(尽管我们可能在2-3分钟内得到同样的结果)。
这样就更快了。
我记得一个故事。
"在一次公司董事会会议上,有两个问题。
1.决定建立一个同步相位仪。
2.决定为员工建造一个自行车停车场。
关于第一个问题,讨论持续了1分钟。
2日,辩论持续了2个多小时"。