帆布与标签

 

我想向你介绍一下用不同方法创建的图表中显示文本的速度比较。我使用CCanvas类做了第一个变体显示,第二个变体是在标签(CChartObjectLabel)上创建的。所有的类都取自标准库。这个想法是在我在CCanvas 上创建显示时产生的,它大大降低了我的专家顾问 的速度。同时,一些程序员声称我错了,CCanvas,更准确地说,OBJ_BITMAP_LABEL的速度非常快,比MetaTrader中所有显示图表信息的方法都快因此,我决定通过实验来检查它。所以,关键的时刻到了。

CCanvas 中操作有输出的显示器

CCanvas

此刻的CPU负载

CPU

CChartObjectLabel 输出显示的操作

标签

启用了速度优化模式的 CChartObjectLabel的操作(我将在下面告诉你)

优化的标签

现在说说时间值。总数是测试专家顾问的总运行时间。最小延迟、中间延迟最大 延迟是以刻度为单位的延迟。但它们不能总是正确获得,尽管我检查了代码,没有错误。我认为这与测试器中的GetTickCount64函数有关。但这是一个微不足道的问题。最主要的是,它显示了总时间。

现在让我简单说说标签上显示的优化问题。事情是这样的,为了让文本出现在屏幕上,你需要从一个特殊的标签线阵列中显示线,这些线从上到下按50块的数量排列。但是,当只有最后一行被更新时,没有必要更新所有的标签,只需要更新与这一行相对应的一个标签即可。打开optimationUpdate模式,我们可以得到超过2倍的性能提升。

我决定更详细地测试标签上的显示,因为这个测试期对它来说太小了,由于它的速度。因此,我增加了测试时间。并得到以下结果。

没有优化更新: false

optimizeUpdate: false

有了优化更新: true

optimizeUpdate: true

我已将所有结果添加到Excel中

结果的比较

第一个直方图显示了整体比较,第二个直方图只显示了有标签的变体。

结论:在CChartObjectLabel 上创建的显示可能比CCanvas上的同等显示快83.7倍。像素操作被认为是所有项目中最昂贵的,这并不是没有道理的!

我附上一个测试结果的表格。源代码可从KB下载:https://www.mql5.com/ru/code/33898


附加的文件:
 

我不明白为什么比较是在展示台而不是在终端?

我还没有研究过这些代码。对于这样的任务,Kanvas是为所有的 "50行 "做了一个。


在终端机中,我通过 "使用量 "测量。这些方法没有显示出显著的差异。

 
fxsaber:

我不明白为什么比较是在展示台而不是在终端?

因为在展示台中,是Canvas的速度太慢导致了问题。而且你可以看到它们是什么。这样的显示占用了50%以上的CPU时间,我在上文中提到了这一点。而在Terminal中,你必须在一个循环中调用方法才能看到一切。但我没有理会这些。我有一个专家顾问在循环中运行的离线优化,事实上,我需要这样一个快速更新的显示。但我现在还没有准备好展示它,因为项目 还没有完成。


fxsaber:

我还没有研究过这些代码。对于这样的任务,Kanvas是为所有的 "50行 "做了一个。

那就看看吧。它是那里唯一的一个!

 
你在误导人们。
你真的想给我擦屁股,是吗?
我知道你想做这样的事。我知道你会编造这样的东西。

你不知道如何准备对比测试。

 
Mihail Matkovskij:

因为在展示台中,是Canvas的速度太慢导致了问题。而且你可以看到哪些人。这样的显示占用了50%以上的CPU时间,我在上文中提到了这一点。而在Terminal中,你必须在一个循环中调用方法才能看到一切。但我没有理会这些。我有一个专家顾问在循环中运行的离线优化,事实上,我需要这样一个快速更新的显示。但我目前还没有准备好展示它,因为项目 还没有完成。


那就看一看吧。它是那里唯一的一个!

好吧......如果你只是为视觉者写作,那么就单独玩这些游戏。你难道没有听说过,任何图形,甚至是位置的打开/关闭 标记都会使渲染器变慢吗?没有。

我尽量不打扰你......为每个字母创建单独的标签......也是一个单独的资源......。

 
Nikolai Semko:
你在误导人们。你想给我擦屁股,是吗? 我知道你想做这样的事。我知道你会想做这样的事情。



你不知道如何准备对比测试。

我从你的帖子中只理解了 "妄想"、"大笑"、"我不知道如何准备测试 "这些词。真的,我不明白他们与这个话题有什么关系......其余的,我从 "完全 "这个词上就不明白了!当我创建这个主题时,我想在这里看到建设性的批评,而不是一堆无法理解的主张!我想在这里看到的是,我想看到的是建设性 的批评。所以,麻烦你解释一下你的话。否则,不要在这里胡说八道!

 
Alexey Viktorov:

好吧......如果你只为视觉者写作,那就单独玩这些游戏。你没有听说过任何图形,甚至是位置的开/关 标记都会减慢显象器的速度吗?没有。

我尽量不打扰你......为每个字母创建单独的标签......也是一个单独的资源......。

我急忙通知你,阿列克谢。当然,你倾向于幻想,就像尼古拉一样......。但其实并不是你想象的那样。简单地说,不同的任务需要不同的解决方案。你和尼古拉会不会有什么实质性的 评论呢!?

 
Mihail Matkovskij:

我从你的帖子中只理解了 "妄想"、"大笑"、"我不知道如何准备测试 "这些词。真的,我不明白他们与这个话题有什么关系......其余的,我从 "完全 "这个词上就不明白了!当我创建这个主题时,我想在这里看到建设性的批评,而不是一堆无法理解的主张!我想在这里看到的是,我想看到的是建设性 的批评。所以,麻烦你解释一下你的话。否则,不要在这里胡说八道!

耐心点,我的朋友,耐心点。
我没有你那么多时间。我正处于最后一个学期,有三个并行的小组项目。所以我在这里处于冲动模式。
但是,好吧,我可以说服你,你是被骗了,只要放松,不要那么紧张。 否则我的努力将是徒劳的。
当然,除非你的头脑能够制服你的情绪。
 
Nikolai Semko:
耐心,我的朋友,耐心。
我没有你那么多时间。我正处于最后一个学期,有三个小组项目 在并行。所以我是在冲动之下来的。
但是,好吧,我可以说服你的妄想,只要放松,不要那么辛苦。 否则我的努力将是徒劳的。

请讲。只有先正确理解 代码,因为代码是一个复杂的东西,而我需要有明确证据的 说法!"。

 

我不明白。第一张图片有一个画布,上面有文字。

随后的图片上没有类似的图形文字。

我的意思是,当时是在比较什么?

 
Mihail Matkovskij:

请讲。但首先要正确理解 代码,因为代码是一个复杂的东西,我需要一个明确的论证 主张!"。

我不会 "正确 "理解你的代码。因为我已经调查过了。简短的判决--来自心灵的悲哀。
你最好能理解我的代码,我将在未来几个月内写好。