关于MT5代码分析器 - 页 2 1234567 新评论 Alain Verleyen 2021.07.13 15:44 #11 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 2021.07.13 15:52 #12 Alain Verleyen : 那这个(第1号帖子)呢? 正如你所看到的,SymbolInfoTick()被显示为代码中最难的部分。这是不正确的。这与下面的帖子中的代码相同(显示SymbolInfoTick的CPU总量=209(0.83%),这是正确的),不同的是,我注释了SymbolInfoTick()是CPU总量=1的那一行。总的执行时间(根据历史数据)并没有因为这个微小的变化而改变,但剖析器的结果却不同。 如果你想检查,我可以在私下里提供代码。 О профилировщике кода MT5 2021.07.09www.mql5.com Я начал использовать новый профайлер. В этом разделе мы могли бы централизовать информацию о том, как его правильно использовать... Ilyas 2021.07.14 08:19 #13 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调用的代码行。 Ilyas 2021.07.14 08:37 #14 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代码的数字,而不是一般的测试 Alain Verleyen 2021.07.14 18:33 #15 嗨,@Ilyas! 谢谢你。我将再次检查你的答案并向你通报。 Ilyas 2021.07.15 07:16 #16 Ilyas:... 至于数字: 不是的,数字只是相似:209 / 0.83 * 100 = 25180正确,在25039个测量值中,有8171个来自SymbolInfoTick调用的代码行。 我把数字搞错了。 事实上,209是25039的0.83469%,被四舍五入为0.83 在SymbolInfoTick 被调用210次的线路上,采集了8171个样本,占2.57%。 Alain Verleyen 2021.07.15 10:40 #17 Ilyas :我把数字搞错了。事实上,209是25039的0.83469%,四舍五入为0.83 8171次运行是在程序执行的一个分支上,其中调用SymbolInfoTick 的一行被执行了210次,占2.57%。 从OnTimer()执行,所以不太清楚为什么是8171?当OnTimer()总CPU显示29683。 Ilyas 2021.07.15 10:58 #18 Alain Verleyen: 从OnTimer()执行,所以不太清楚为什么是8171?当OnTimer()总CPU显示29683。 请提供代码,我将仔细检查计数器的操作。 Alain Verleyen 2021.07.15 13:06 #19 Ilyas :请提供代码,我将仔细检查计数器的操作。 我一有时间就会在私下里做这件事。谢谢你。 Andrey Khatimlianskii 2021.07.28 13:23 #20 Ilyas: 伊利亚斯,也帮我搞清楚这个问题。 1.为什么一个空函数调用可能会占用34.5%的Self CPU?同时,它后面的函数的调用,其内部占用了总CPU的38.16%,却根本没有显示在报告中? 功能代码。 2.这个例子显示了第二个问题:带有TimeCurrent()的一行不仅在函数中,而且在整个程序中都花费了不合理的时间。 在我注释掉CheckTimeSeries()的主体之前,主要的负荷是在它的TimeCurrent()行。 它真的有这么重的功能吗?用什么来代替它?或者如何使其经济化(在程序执行的一个循环内进行缓存)? 只要有可能,我就会通过稀释它们来节省计算量(每栏一次,每X秒一次,每Y毫秒一次,等等)。但事实证明,检查本身,无论是做计算,都是相当耗费资源的。 谢谢你的帮助。 1234567 新评论 原因: 取消 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
截图显示的是调用字符串的统计数据,而不是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?
那这个(第1号帖子)呢?
正如你所看到的,SymbolInfoTick()被显示为代码中最难的部分。这是不正确的。这与下面的帖子中的代码相同(显示SymbolInfoTick的CPU总量=209(0.83%),这是正确的),不同的是,我注释了SymbolInfoTick()是CPU总量=1的那一行。总的执行时间(根据历史数据)并没有因为这个微小的变化而改变,但剖析器的结果却不同。
如果你想检查,我可以在私下里提供代码。
我很抱歉,但这并不清楚。
剖析师总结说。
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?
你在比较 "代码行 "和 "函数 "的统计数据
有一行代码
共有210次该字符串被纳入统计。
有一个函数SymbolInfoTick,这个函数打了209次统计。
该函数只在这一行代码中调用,也许这就是你对计数器感到困惑的原因
至于数字:
不是的,数字只是相似: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()的执行时间。
结果。
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!
谢谢你。我将再次检查你的答案并向你通报。
至于数字:
不是的,数字只是相似:209 / 0.83 * 100 = 25180
正确,在25039个测量值中,有8171个来自SymbolInfoTick调用的代码行。
我把数字搞错了。
事实上,209是25039的0.83469%,被四舍五入为0.83
在SymbolInfoTick 被调用210次的线路上,采集了8171个样本,占2.57%。
我把数字搞错了。
事实上,209是25039的0.83469%,四舍五入为0.83
8171次运行是在程序执行的一个分支上,其中调用SymbolInfoTick 的一行被执行了210次,占2.57%。
从OnTimer()执行,所以不太清楚为什么是8171?当OnTimer()总CPU显示29683。
请提供代码,我将仔细检查计数器的操作。
请提供代码,我将仔细检查计数器的操作。
伊利亚斯,也帮我搞清楚这个问题。
1.为什么一个空函数调用可能会占用34.5%的Self CPU?同时,它后面的函数的调用,其内部占用了总CPU的38.16%,却根本没有显示在报告中?
功能代码。
2.这个例子显示了第二个问题:带有TimeCurrent()的一行不仅在函数中,而且在整个程序中都花费了不合理的时间。
在我注释掉CheckTimeSeries()的主体之前,主要的负荷是在它的TimeCurrent()行。
它真的有这么重的功能吗?用什么来代替它?或者如何使其经济化(在程序执行的一个循环内进行缓存)?
只要有可能,我就会通过稀释它们来节省计算量(每栏一次,每X秒一次,每Y毫秒一次,等等)。但事实证明,检查本身,无论是做计算,都是相当耗费资源的。
谢谢你的帮助。