测试x64平台的新MQL5编译器--计算速度提高2至10倍 - 页 19

 
Aleksey Vyazmikin:

剖析器的 建议了吗?

 
Aleksey Vyazmikin:

第2种选择。以每一行的类型为例。

if(Test_P==1000)if(DonProc<5.5 && Levl_Down_DC<-7.5) CalcTest=CalcTest+1; //(0.4810127 0.3037975 0.2151899)
                  if(Test_P==1001)if(DonProc< 5.5 && Levl_Down_DC>=-7.5 && TimeH< 21.5 && TimeH>=16.5 && TimeH< 19.5 && Levl_Close_H1s1N< 2.5) CalcTest=CalcTest+1; //(0.4400657 0.4072250 0.1527094)
                  if(Test_P==1002)if(DonProc< 5.5 && Levl_Down_DC>=-7.5 && TimeH< 21.5 && TimeH>=16.5 && TimeH< 19.5 && Levl_Close_H1s1N>=2.5) CalcTest=CalcTest+1; //(0.3739837 0.5121951 0.1138211)
                  if(Test_P==1003)if(DonProc<5.5 && Levl_Down_DC>=-7.5 && TimeH<21.5 && TimeH>=16.5 && TimeH>=19.5) CalcTest=CalcTest+1; //(0.3390706 0.4647160 0.1962134)

变成一个单独的函数。试着相信Renate:)

也就是说,最后的结果应该是这样的。

if(Test_P==1000 && Func1000()) CalcTest = CalcTest+1;
if(Test_P==1001 && Func1001()) CalcTest = CalcTest+1;
等。
 
Aleksey Vyazmikin:

是的,这里有一个 EA的链接

已经两天了 - 汇编是7%...

'Tree_Brut_TestPL_F_Fast.mq5'
'Normal.mqh'
'Math.mqh'
code generated
0 error(s), 0 warning(s), 1456022 msec elapsed

在这台机器上。

2019.10.15 09:08:34.692 Terminal        Windows 10 (build 18362) x64, IE 11, UAC, Intel Xeon  E5-2630 v4 @ 2.20 GHz, Memory: 58760 / 65457 Mb, Disk: 20 / 224 Gb, GMT+2
 
Alexey Kozitsyn:

剖析器 已经提供了吗?

不,它没有--我到底应该在其中看到什么?我真的不知道如何使用它。


阿列克谢-科齐岑

选项2。要把每一行的类型。

成为一个单独的函数。试着相信Renate:)

也就是说,最后的结果应该是这样。

等。

是 "case: "的变体,而不是 "if "的变体,在那里有显著的速度提升。如果你甚至让它像

               switch(Test_P)
                    {
                     case 1000: F1(); break;
                     case 1001: F2(); break;
                    }
   

代码将变得更加庞大。但你可以比较编译时间和性能,当然...

 
Slava:

在这辆车上。

是的,那个代码并不大,我还没有发布500兆字节的代码--如果你需要,我可以...

 
Aleksey Vyazmikin:

你建议采取什么其他手段?这是迄今为止我想出的最快的方案......

优化逻辑。例如,使用数组和循环的工作。尝试将标准值打包成一个数组。并在一个循环中做检查。也许那时就不需要在7.4万个案例中......

 
Aleksey Vyazmikin:

1.不,他们没有--我到底应该在里面看到什么?我真的不知道如何使用它。


2.是 "case: "变体,而不是 "if "变体带来了显著的速度提升。如果你甚至让它像

代码将变得更加快速...但你当然可以比较编译时间和性能...

1.你会在那里看到代码中最慢的部分。虽然...另一个问题是,它是否会影响编纂...

2.如你所愿:你可以使用案例。有人建议你把它分解成小的功能。打破它,并测试它。是的,当然,代码会变大。但该怎么做。

 
@Renat Fatkhullin,请澄清一下,剖析器能否帮助揭示编译瓶颈?或者只用它来实时检查代码速度?
 
Aleksey Vyazmikin:

我想把这个枚举,比方说,转移到外部CSV文件中,但这时又出现了另一个问题--读取文件浪费时间,此外,当把任务分配给代理时,我不能给每个代理发送500兆字节,而EA代码被发送到一个代理(或不?

还有一个问题,我的代码很容易被7zip压缩,从500到15兆,但压缩后的文件会在500左右--为什么会这样--没有办法进行原始的压缩(至少到100兆)?

用zip压缩文件。阅读拉链,在里面解压。这将比传输500Mb的EA更快(它也被传输到每个代理)。

 
Alexey Kozitsyn:
@Renat Fatkhullin,请你澄清一下,剖析器能不能帮助揭示编译瓶颈?或者只用它来实时检查代码速度?

剖析器与编译没有关系。

Профилирование кода - Разработка программ - Справка по MetaEditor
Профилирование кода - Разработка программ - Справка по MetaEditor
  • www.metatrader5.com
Профилирование — это сбор характеристик программы во время ее выполнения. При профилировании замеряется время выполнения и количество вызовов отдельных функций и строк в коде программы. При помощи этого инструмента программист может найти наиболее медленные участки кода и провести их оптимизацию. Профилирование можно проводить на обычном...