关于MT5代码分析器 - 页 3 1234567 新评论 Andrey Khatimlianskii 2021.07.28 17:01 #21 继续。 哪条线(1、2或3)仍然是资源密集型? 我不明白,占整个程序55%时间的 "重头戏 "iTime,怎么只显示0.81%的自我CPU? 反之亦然--为什么开头的括号(1)和最简单的条件(2,极少为真)会显示33.84%的自家CPU? 为什么自身CPU和总CPU不匹配? 这个函数确实很重,但它所有的重物都位于代码的更下方。而分析器建议寻找iTime和两个布尔变量的替代物? 我显然不明白什么。 Andrei Trukhanovich 2021.07.28 17:05 #22 Andrey Khatimlianskii:我显然错过了什么。 也许是滑倒了? Andrey Khatimlianskii 2021.07.28 17:09 #23 Andrei Trukhanovich:也许是滑倒了? 看起来不像是,报告中的数字是一样的。 Ilyas 2021.07.28 19:21 #24 Andrey Khatimlianskii:伊利亚斯,也帮我搞清楚这个问题。1.为什么一个空函数调用可能会占用34.5%的Self CPU?同时,它后面的函数的调用,其内部占用了总CPU的38.16%,却根本没有显示在报告中?功能代码。2.这个例子显示了第二个问题:带有TimeCurrent()的一行不仅在函数中,而且在整个程序中都花费了不合理的时间。在我注释掉CheckTimeSeries()的主体之前,主要的负荷是在它的TimeCurrent()行。它真的有这么重的功能吗?用什么来代替它?或者如何使其经济化(在程序执行的一个循环内进行缓存)?只要有可能,我就会通过稀释它们来节省计算量(每栏一次,每X秒一次,每Y毫秒一次,等等)。但事实证明,检查本身,无论是做计算,都是相当耗费资源的。谢谢你的帮助。 1)没有代码,很难说为什么这些统计数据如此糟糕,也许是由于优化的原因 2)为什么不尝试在循环之前在Timer函数中获取时间,并将其作为参数进一步传递,在循环中至少调用这个函数2*N次的意义何在? Ilyas 2021.07.28 19:26 #25 Andrey Khatimlianskii:作为一个后续行动。哪条线(1、2或3)仍然是资源密集型?我不明白,占整个程序55%时间的 "重头戏 "iTime,怎么只显示0.81%的自我CPU? 反之亦然--为什么开头的括号(1)和最简单的条件(2,极少为真)会显示33.84%的自家CPU?为什么自身CPU和总CPU不匹配?这个函数确实很重,但它所有的重物都位于代码的更下方。而分析器建议寻找iTime和两个布尔变量的替代物?我显然不明白什么。 1)我将假设函数已经被内联 2)计数器确实不相关,SelfCPU是函数代码的负载,没有考虑到被调用的函数,在给出的代码中,它是一个IF开启器(分支)。 3) TotalCPU计数器显示执行分支的负载,对于程序的这个分支中的所有调用都是如此。 Alain Verleyen 2021.07.28 21:03 #26 不应该总是100%吗?或甚至略少,同时考虑到@global_initializations和@global_deinitializations。 这里是超过102%......(根据历史数据建立3003)。 Alain Verleyen 2021.07.28 21:24 #27 Ilyas :1)我将假设函数已经被内联 2)计数器确实没有关系,SelfCPU是函数代码上的负载,没有考虑到被调用的函数,在上面的代码中,它是一个IF开路器(分支)。3)TotalCPU计数器显示一个执行分支的负载,为程序的这个分支中的所有调用。 它有什么用?很明显,IF语句本身的CPU负载很低。它不应该包括函数调用吗? 在任何情况下。如何理解(来自安德鲁的例子)。 if(!simulated) taking 3.86% ?!? 那这个呢? 在这里,我们似乎是在同一个Tick()函数中! 我真的想使用Profiler并了解它,但这一切都没有意义。对不起。 该怎么做?我们能提供什么帮助? Andrey Khatimlianskii 2021.07.29 14:17 #28 Ilyas:1)没有代码,很难说为什么统计数据如此糟糕,也许是因为优化的缘故吧2)为什么不尝试在循环之前在Timer函数中获取时间,并将其作为参数进一步传递,在循环中至少调用这个函数2*N次有什么意义? 谢谢你的回答! 1)我很难在一个简单的代码上重现它,是的。而且我还没有准备好把整个项目送出去。 2)在这个特定的案例中,我同意。 但还有许多其他类使用相同或类似的检查,不能没有TimeCurrent或GetTickCount。 如何优化他们的调用,不要多次请求相同的值? 而且,TimeCurrent是否真的如此沉重,以至于它在真正沉重的计算背景下会被注意到(即使是每1或5分钟执行一次)? 还是我又弄错了,38.16%的总CPU/26.07%的自身CPU被检查if本身占用了(没有考虑TimeCurrent 函数调用)?但为什么会这样呢? Ilyas: 1)我将假设该函数是内联的 2)计数器确实没有关系,SelfCPU是对函数代码的负载,没有考虑到被调用的函数,在上面的代码中,是IF的开启器(分支)。3) TotalCPU计数器显示一个执行分支的负载,由该程序分支中的所有调用组成。 1)这无助于理解为什么如此贪婪的开篇括号。如何解释这个问题? 2) 关于SelfCPU现在已经很清楚了,谢谢。这是对函数代码的加载,而不考虑被调用的函数。 这也解释了带iTime的字符串的SelfCPU很低--它很少被达到,只是很少被调用。 但为什么会有这么大的TotalCPU?或者它显示了整个程序中所有iTime(和其他CopyXXX函数?)函数的负载? Renat Fatkhullin 2021.07.29 14:24 #29 Andrey Khatimlianskii:谢谢你的回答1)我不认为我可以在简单的代码上重现它,是的。而且我还没有准备好把整个项目送出去。2)在这个特定的案例中,我同意。但还有许多其他类使用相同或类似的检查,不能没有TimeCurrent或GetTickCount。 如何优化他们的调用,不要多次请求相同的值?而且,TimeCurrent是否真的如此沉重,以至于它在真正沉重的计算背景下会被注意到(即使是每1或5分钟执行一次)? 或者我又弄错了,总CPU的38.16%/自身CPU的26.07%被检查本身占用了(没有调用TimeCurrent 函数)?但是,为什么会这样呢?1)这无助于理解为什么如此贪婪的开篇括号。如何解释这个问题?2) 关于SelfCPU现在已经很清楚了,谢谢。这是对函数代码的加载,而不考虑被调用的函数。这也解释了带iTime的字符串的SelfCPU很低--它很少被达到,只是很少被调用。但为什么会有这么大的TotalCPU?或者它显示了整个程序中所有iTime(和其他CopyXXX函数?)函数的负载? 请从标准交付中抽取任何代码,进行校对,并在此基础上提出问题。这将允许对情况进行可重复的评估,并提供准确的答案。 否则,为分析器 报告回答你的小段代码是没有用的。在幕后有大量的优化器工作,它将你所有的代码变成完全不同的杂乱无章的嵌入表示。 供参考:上帝保佑,100个C++程序员中有1个能使用剖析器并理解其报告。原因是本地代码优化器。 Andrey Khatimlianskii 2021.07.29 14:30 #30 Alain Verleyen:在任何情况下。如何理解(来自安德鲁的例子)。 if(!simulated) taking 3.86% ?!? 是的,在不考虑外部函数调用 的情况下,SelfCPU的信息量不大。只有在最底层,即使用本地MQL函数的地方,你才会看到真正的负载。 但在这种情况下,不会清楚这些函数从哪些地方被更频繁地调用(和消耗更多),以及从哪些地方有单一的调用!在这种情况下,我们会发现,这些函数的调用是不可能的。那么,我知道CopyXXX和OrderXXX函数消耗的时间最多,有什么意义呢?我需要知道在我的程序中哪些块被调用得太频繁/太不充分。 我想这就是与TotalCPU相结合的 模式的作用。我将会研究这个问题。但到目前为止,我看到甚至有完全被注释掉的行(!)。 1234567 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
继续。
哪条线(1、2或3)仍然是资源密集型?
我不明白,占整个程序55%时间的 "重头戏 "iTime,怎么只显示0.81%的自我CPU?
反之亦然--为什么开头的括号(1)和最简单的条件(2,极少为真)会显示33.84%的自家CPU?
为什么自身CPU和总CPU不匹配?
这个函数确实很重,但它所有的重物都位于代码的更下方。而分析器建议寻找iTime和两个布尔变量的替代物?
我显然不明白什么。
我显然错过了什么。
也许是滑倒了?
也许是滑倒了?
看起来不像是,报告中的数字是一样的。
伊利亚斯,也帮我搞清楚这个问题。
1.为什么一个空函数调用可能会占用34.5%的Self CPU?同时,它后面的函数的调用,其内部占用了总CPU的38.16%,却根本没有显示在报告中?
功能代码。
2.这个例子显示了第二个问题:带有TimeCurrent()的一行不仅在函数中,而且在整个程序中都花费了不合理的时间。
在我注释掉CheckTimeSeries()的主体之前,主要的负荷是在它的TimeCurrent()行。
它真的有这么重的功能吗?用什么来代替它?或者如何使其经济化(在程序执行的一个循环内进行缓存)?
只要有可能,我就会通过稀释它们来节省计算量(每栏一次,每X秒一次,每Y毫秒一次,等等)。但事实证明,检查本身,无论是做计算,都是相当耗费资源的。
谢谢你的帮助。
1)没有代码,很难说为什么这些统计数据如此糟糕,也许是由于优化的原因
2)为什么不尝试在循环之前在Timer函数中获取时间,并将其作为参数进一步传递,在循环中至少调用这个函数2*N次的意义何在?
作为一个后续行动。
哪条线(1、2或3)仍然是资源密集型?
我不明白,占整个程序55%时间的 "重头戏 "iTime,怎么只显示0.81%的自我CPU?
反之亦然--为什么开头的括号(1)和最简单的条件(2,极少为真)会显示33.84%的自家CPU?
为什么自身CPU和总CPU不匹配?
这个函数确实很重,但它所有的重物都位于代码的更下方。而分析器建议寻找iTime和两个布尔变量的替代物?
我显然不明白什么。
1)我将假设函数已经被内联
2)计数器确实不相关,SelfCPU是函数代码的负载,没有考虑到被调用的函数,在给出的代码中,它是一个IF开启器(分支)。
3) TotalCPU计数器显示执行分支的负载,对于程序的这个分支中的所有调用都是如此。
不应该总是100%吗?或甚至略少,同时考虑到@global_initializations和@global_deinitializations。
这里是超过102%......(根据历史数据建立3003)。
1)我将假设函数已经被内联
2)计数器确实没有关系,SelfCPU是函数代码上的负载,没有考虑到被调用的函数,在上面的代码中,它是一个IF开路器(分支)。
3)TotalCPU计数器显示一个执行分支的负载,为程序的这个分支中的所有调用。
它有什么用?很明显,IF语句本身的CPU负载很低。它不应该包括函数调用吗?
在任何情况下。如何理解(来自安德鲁的例子)。
if(!simulated) taking 3.86% ?!?
那这个呢?
在这里,我们似乎是在同一个Tick()函数中!
我真的想使用Profiler并了解它,但这一切都没有意义。对不起。
该怎么做?我们能提供什么帮助?
1)没有代码,很难说为什么统计数据如此糟糕,也许是因为优化的缘故吧
2)为什么不尝试在循环之前在Timer函数中获取时间,并将其作为参数进一步传递,在循环中至少调用这个函数2*N次有什么意义?
谢谢你的回答!
1)我很难在一个简单的代码上重现它,是的。而且我还没有准备好把整个项目送出去。
2)在这个特定的案例中,我同意。
但还有许多其他类使用相同或类似的检查,不能没有TimeCurrent或GetTickCount。
如何优化他们的调用,不要多次请求相同的值?
而且,TimeCurrent是否真的如此沉重,以至于它在真正沉重的计算背景下会被注意到(即使是每1或5分钟执行一次)?
还是我又弄错了,38.16%的总CPU/26.07%的自身CPU被检查if本身占用了(没有考虑TimeCurrent 函数调用)?但为什么会这样呢?
1)我将假设该函数是内联的
2)计数器确实没有关系,SelfCPU是对函数代码的负载,没有考虑到被调用的函数,在上面的代码中,是IF的开启器(分支)。
3) TotalCPU计数器显示一个执行分支的负载,由该程序分支中的所有调用组成。
1)这无助于理解为什么如此贪婪的开篇括号。如何解释这个问题?
2) 关于SelfCPU现在已经很清楚了,谢谢。这是对函数代码的加载,而不考虑被调用的函数。
这也解释了带iTime的字符串的SelfCPU很低--它很少被达到,只是很少被调用。
但为什么会有这么大的TotalCPU?或者它显示了整个程序中所有iTime(和其他CopyXXX函数?)函数的负载?
谢谢你的回答
1)我不认为我可以在简单的代码上重现它,是的。而且我还没有准备好把整个项目送出去。
2)在这个特定的案例中,我同意。
但还有许多其他类使用相同或类似的检查,不能没有TimeCurrent或GetTickCount。
如何优化他们的调用,不要多次请求相同的值?
而且,TimeCurrent是否真的如此沉重,以至于它在真正沉重的计算背景下会被注意到(即使是每1或5分钟执行一次)?
或者我又弄错了,总CPU的38.16%/自身CPU的26.07%被检查本身占用了(没有调用TimeCurrent 函数)?但是,为什么会这样呢?
1)这无助于理解为什么如此贪婪的开篇括号。如何解释这个问题?
2) 关于SelfCPU现在已经很清楚了,谢谢。这是对函数代码的加载,而不考虑被调用的函数。
这也解释了带iTime的字符串的SelfCPU很低--它很少被达到,只是很少被调用。
但为什么会有这么大的TotalCPU?或者它显示了整个程序中所有iTime(和其他CopyXXX函数?)函数的负载?
请从标准交付中抽取任何代码,进行校对,并在此基础上提出问题。这将允许对情况进行可重复的评估,并提供准确的答案。
否则,为分析器 报告回答你的小段代码是没有用的。在幕后有大量的优化器工作,它将你所有的代码变成完全不同的杂乱无章的嵌入表示。
供参考:上帝保佑,100个C++程序员中有1个能使用剖析器并理解其报告。原因是本地代码优化器。
在任何情况下。如何理解(来自安德鲁的例子)。
if(!simulated) taking 3.86% ?!?
是的,在不考虑外部函数调用 的情况下,SelfCPU的信息量不大。只有在最底层,即使用本地MQL函数的地方,你才会看到真正的负载。
但在这种情况下,不会清楚这些函数从哪些地方被更频繁地调用(和消耗更多),以及从哪些地方有单一的调用!在这种情况下,我们会发现,这些函数的调用是不可能的。那么,我知道CopyXXX和OrderXXX函数消耗的时间最多,有什么意义呢?我需要知道在我的程序中哪些块被调用得太频繁/太不充分。
我想这就是与TotalCPU相结合的
模式的作用。我将会研究这个问题。但到目前为止,我看到甚至有完全被注释掉的行(!)。