我的项目涉及历史和实时数据分析.在其最后阶段包含几个复杂的算法(超过800).总体而言,分析阶段大致如下:
这些第三阶段公式是复杂条件的大块.但是,这些复杂的条件使用了有限数量的简单语句.结果,这些简单的陈述在复杂的条件中重复了很多次.让我举一个非常简单的例子.
if ((var1[0]<var2[0]*0.5)and(var3[0]=1))or(var15[1]<>var15[0]))
....lots of similar statements....
then take action.
Run Code Online (Sandbox Code Playgroud)
现在,声明如
"(var3[0]=1)" or "(var15[1]<>var15[0])"
Run Code Online (Sandbox Code Playgroud)
在其他if块中反复使用.我的想法是解析所有这些独特的简单语句,并自动创建一些计算结果的代码(true/false),并在第三阶段开始之前将它们存储在布尔数组中.像这样:
arr[12]:=var1[0]<var2[0]*0.5;
arr[13]:=var3[0]=1;
...
arr[128]:=var15[1]<>var15[0];
Run Code Online (Sandbox Code Playgroud)
然后(再次通过在编译之前解析我的代码)将simpler语句替换为其相应的数组元素.所以,而不是
if ((var1[0]<var2[0]*0.5)and(var3[0]=1))or(var15[1]<>var15[0]))
Run Code Online (Sandbox Code Playgroud)
看起来像
if ((arr[12])and(arr[13]))or(arr[128])
Run Code Online (Sandbox Code Playgroud)
我的代码中的这些更改会加快执行(计算)时间吗?或者编译器已经做了类似的事情,我只是在浪费时间?请记住,在每个计算周期中,这些简单的语句会重复数十次或数百次.并且在实时数据启动之前至少要计算300,000个周期.因此,每一点都有帮助.本质上我问的是变量之间的比较是否慢于检索布尔数组元素的值;
UPDATE
由于有些人要求一些真实的代码,这里是真实代码的一部分.98%的代码是变量(带有[0]的所有内容都是允许访问先前变量值的变量).2%是功能.变量在前一阶段计算.几乎所有变量都是整数.总共有800多个类似的块.最少300,000个计算周期.平均时间约为45秒.由于我不需要在这里解释的原因,我应该使它快2倍.如果编写算法的人是程序员,代码可能会有不同的形式.但他们不是.他们可以处理一些基本的东西,如条件块.这是无法改变的.
我注意到有些人来这里打算表达讽刺意味.请远离.我不需要你的帮助.那些愿意提供建设性意见的人非常欢迎这样做.事实上,我提前感谢他们只是努力阅读这么长的帖子.我很抱歉错误的代码格式化,这是一个失败的努力将其作为代码发布在这里.
if ( ZEChT01Pc[0] < ZEChT02Pc[0])
and( ZEChP01Pc[0] < ZEChP02Pc[0])
and( ZEChT01Bn[0] > ZEChP01Bn[0])
and( BncUp_TL_P_1_2[0] > ZEChT01Bn[0])
and( higSncZEChT01[0] < HZigCh30[0])
and( ((ZEChT01Pc[0] < LZigCh30[0]) )
or
( (ZEChT01Pc[0] < LZigCh3002[0] ) and( LZigCh30[0] < LZigCh3002[0] ) and( ZEChT01Pc[0] <= Bnc_Up_HZigCh_Pr[0]) )
or …Run Code Online (Sandbox Code Playgroud)