关于MT5代码分析器 - 页 2

 
Ilyas :

截图显示的是调用字符串的统计数据,而不是SymbolInfoTick函数。

总的来说,给定的字符串被测量了210次,一次是在SymbolInfoTick调用之前或之后正好 "停止 "在该字符串上,还有209次是SymbolInfoTick的返回字符串。

对不起,但这并不清楚。

剖析师总结说。

SymbolInfoTick() 总CPU: 209 (0.83%)

代码本身说。

SymbolInfoTick () 总CPU: 210 (2.57%)

SymbolInfoTick()在代码中只出现了一次。这些不同的价值是什么,一点也不清楚。好吧,209对210,你说这是因为它在那条线上 "阻止 "了一个人(对我来说没有意义,但我想这并不重要)。

%的情况如何?

0 2021.07.10 11: 52: 19.032 MQL5分析器总测量值25039,0/0错误,分析了99MB堆栈内存(92872/1073741824)。

所以209(0.83%)意味着100%=25039。认可

但210(2.57%)意味着100%=8171?什么是8171的总CPU?

 
Alain Verleyen :

那这个(第1号帖子)呢?

正如你所看到的,SymbolInfoTick()被显示为代码中最难的部分。这是不正确的。这与下面的帖子中的代码相同(显示SymbolInfoTick的CPU总量=209(0.83%),这是正确的),不同的是,我注释了SymbolInfoTick()是CPU总量=1的那一行。总的执行时间(根据历史数据)并没有因为这个微小的变化而改变,但剖析器的结果却不同。

如果你想检查,我可以在私下里提供代码。

О профилировщике кода MT5
О профилировщике кода MT5
  • 2021.07.09
  • www.mql5.com
Я начал использовать новый профайлер. В этом разделе мы могли бы централизовать информацию о том, как его правильно использовать...
 
Alain Verleyen:

我很抱歉,但这并不清楚。

剖析师总结说。

SymbolInfoTick() 总CPU: 209 (0.83%)

代码本身说。

SymbolInfoTick () 总CPU: 210 (2.57%)

SymbolInfoTick()在代码中只出现了一次。这些不同的价值是什么,一点也不清楚。好吧,209对210,你说这是因为它在那条线上 "阻止 "了一个人(对我来说没有意义,但我想这并不重要)。

%的情况如何?

0 2021.07.10 11: 52: 19.032 MQL5分析器总测量值25039,0/0错误,分析了99MB堆栈内存(92872/1073741824)。

所以209(0.83%)意味着100%=25039。认可

但210(2.57%)意味着100%=8171?什么是8171的总CPU?

你在比较 "代码行 "和 "函数 "的统计数据

有一行代码

       if (! SymbolInfoTick (symbolф,tickф))     // Total CPU : 210 (2.57%)  Self CPU : 1 (1.49%)

共有210次该字符串被纳入统计。

  • 209次,作为调用SymbolInfoTick的代码行
  • 1次,就像操作员一样

有一个函数SymbolInfoTick,这个函数打了209次统计。
该函数只在这一行代码中调用,也许这就是你对计数器感到困惑的原因


至于数字:
因此,209(0.83%)意味着100%=25039。OK

不是的,数字只是相似:209 / 0.83 * 100 = 25180


但210(2.57%)意味着100%=8171?什么是8171的总CPU?

正确,在25039个测量值中,有8171个来自SymbolInfoTick调用的代码行。

 

Alain Verleyen:

回溯测试运行 在。

2021.07.10 08:00: 37.101 Core 01 EURUSD, H1: 230861 ticks, 998 bars generated.测试在0: 03: 09.367通过(包括预处理刻度0: 00: 00.515)。

我添加了代码,使用GetMicrosecondCount()测量SymbolInfoTick()的执行时间。

       ulong start= GetMicrosecondCount ();

       //--- Get tick information
       if (! SymbolInfoTick (symbol,tick))
         return ( false );

      BENCH += GetMicrosecondCount ()-start;

结果。

2021.07.10 08:00: 37.101 Core 01 2021.05.30 23:59:59 Total = 1209572 Executed = 836973 in661874 microseconds

因此,SymbolInfoTick()在3分9秒的历史数据上总共花了661毫秒。然而,分析器显示,它使用了74.71%的测量值。这有多准确或有用,我不明白。


让我说清楚,测试不仅仅是执行MQL代码+剖析器,通过捕捉统计数据,使执行速度放慢一些。


也就是说,在报告中,74.71%是一个相对于MQL代码的数字,而不是一般的测试

 

嗨,@Ilyas!

谢谢你。我将再次检查你的答案并向你通报。

 
Ilyas:
...

至于数字:

不是的,数字只是相似:209 / 0.83 * 100 = 25180


正确,在25039个测量值中,有8171个来自SymbolInfoTick调用的代码行。

我把数字搞错了。

事实上,209是25039的0.83469%,被四舍五入为0.83


SymbolInfoTick 被调用210次的线路上,采集了8171个样本,占2.57%。

 
Ilyas :

我把数字搞错了。

事实上,209是25039的0.83469%,四舍五入为0.83


8171次运行是在程序执行的一个分支上,其中调用SymbolInfoTick 的一行被执行了210次,占2.57%。

从OnTimer()执行,所以不太清楚为什么是8171?当OnTimer()总CPU显示29683。
 
Alain Verleyen:
从OnTimer()执行,所以不太清楚为什么是8171?当OnTimer()总CPU显示29683。

请提供代码,我将仔细检查计数器的操作。

 
Ilyas :

请提供代码,我将仔细检查计数器的操作。

我一有时间就会在私下里做这件事。谢谢你。
 
Ilyas:

伊利亚斯,也帮我搞清楚这个问题。

1.为什么一个空函数调用可能会占用34.5%的Self CPU?同时,它后面的函数的调用,其内部占用了总CPU的38.16%,却根本没有显示在报告中?


功能代码。



2.这个例子显示了第二个问题:带有TimeCurrent()的一行不仅在函数中,而且在整个程序中都花费了不合理的时间。

在我注释掉CheckTimeSeries()的主体之前,主要的负荷是在它的TimeCurrent()行。

它真的有这么重的功能吗?用什么来代替它?或者如何使其经济化(在程序执行的一个循环内进行缓存)?

只要有可能,我就会通过稀释它们来节省计算量(每栏一次,每X秒一次,每Y毫秒一次,等等)。但事实证明,检查本身,无论是做计算,都是相当耗费资源的。


谢谢你的帮助。

原因: