视觉特效 - 页 10

 
Реter Konow:

表中的变化在哪里?它是重新绘制的吗?

是的,它一直在重绘。

总的来说,在没有暂停的情况下,脚本抛出了3个测试

2020.03.14 22:21:20.152 tst_T (EURUSD,H1) #1: loops=1000 ms=360

2020.03.14 22:21:23.558 tst_T (EURUSD,H1) #2: loops=10000 ms=3406

2020.03.14 22:21:59.366 tst_T (EURUSD,H1) #3: loops=100000 ms=35812

1000 - 100 000次循环和价值更新....令人惊奇的是,.Net+WinForm即使对于这种晦涩难懂的任务来说也是相当有成效的,即使在我的笔记本电脑上也没有任何滞后。

#import "LogToWinForm.dll"
#import

double price[20];

#define    SpeedTest(count_x10,msg,EX)        {uint mss=GetTickCount(); ulong count=(ulong)pow(10,count_x10);for(ulong ii=0;ii<count&&!_StopFlag;ii++){EX;} \
                                              printf("%s: loops=%i ms=%u",msg,count,GetTickCount()-mss);}

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   ArrayInitialize(price, 1.0);
   while(!Log::InitForm()) Sleep(200);
   Sleep(1000);

   SpeedTest(3, "№ 1", sendTodl());
   SpeedTest(4, "№ 2", sendTodl());
   SpeedTest(5, "№ 3", sendTodl());
}
//+------------------------------------------------------------------+
void sendTodl()
{
   for(int i = 0; i < 19; i++)
   {
      price[i] = price[i + 1];
   }
   price[19] = NormalizeDouble(price[18] + _Point, _Digits);
   double ask = NormalizeDouble((double)rand() * _Point, _Digits);
   double bid = NormalizeDouble((double)rand() * _Point, _Digits);
   Log::PrintToLog(ask, bid, price);
};
//+------------------------------------------------------------------+

速度数字是均匀的,事实证明,22个双倍值(双倍,双倍双倍[])投进.dll并完全更新WinForms需要0.3 ms

UPD:现在你可以看到,在这种更新速度下,CPU的负载是存在的。


 
Igor Makanu:

它一直在重画。

总的来说,在没有暂停的情况下,脚本抛出了3个测试

2020.03.14 22:21:20.152 tst_T (EURUSD,H1) # 1: loops=1000 ms=360

2020.03.14 22:21:23.558 tst_T (EURUSD,H1) #2: loops=10000 ms=3406

2020.03.14 22:21:59.366 tst_T (EURUSD,H1) #3: loops=100000 ms=35812

1000 - 100 000次循环和价值更新....令人惊奇的是,.Net+WinForm即使对于这种晦涩难懂的任务来说也是相当有成效的,即使在我的笔记本电脑上也没有任何滞后。

速度数字是均匀的,事实证明,22个双倍值(双倍,双倍双倍[])投进.dll并完全更新WinForms需要0.3 ms

UPD:现在你可以看到,这样的更新速度给CPU带来了负担。


我需要给微软公司写信))。

他们的表格更新负荷比我高。把每16ms的刷新。



ZS. 在sharpe上建立一个等效的表格。有意思的是,比较负载。

附加的文件:
GUI_Expert.ex5  600 kb
 
12毫秒将是更正确的
 
Реter Konow:

我必须写信给微软公司)。

他们有比我更重的表格更新负担。将其设置为每16ms刷新一次。



ZS. 在sharpe上建立一个等效的表格。有意思的是,比较负载。

写,但尝试100万次刷新表格,当与Net交换时,它花了

2020.03.14 23:22:24.039 tst_T (EURUSD,H1) #4: loops=1000000 ms=322531

在我这里,更新不到16毫秒 - 我写的是0.3毫秒以上。

但是请注意,这是一个完全独立的窗体(窗口),它获得所有的Win事件,所以我想测试一下--我想知道.Net是否会在这样的交换中挂起,并滞后于一切。

ZS: 明天也许会在PC上检查这个脚本,那里比笔记本的处理器更强大,至少测试器(优化器)比笔记本上几乎快3倍,虽然这没有意义--运行.Net非常非常好。

 
Igor Makanu:

写,但尝试100万次更新表,当与Net交换时,它需要

2020.03.14 23:22:24.039 tst_T (EURUSD,H1) #4: loops=1000000 ms=322531

但请注意,这是一个完全独立的窗体(窗口),它接收所有的Win事件,一般来说,我想测试一下--有趣的是.Net是否会在这样的交换中冻结,是否一切都会滞后

SZS: 明天也许会在PC上检查这个脚本,那里比笔记本的处理器更强大,至少测试器(优化器)比笔记本上快3倍,虽然没有意义--运行.Net非常非常好。

而且为什么要更新一百万次?如果以16毫秒的速度实时更新表,会更便宜。剩下的就没有必要了,因为事件模型 的速度并不快。这是关于重绘的负荷。

 
Реter Konow:

为什么要更新一百万次?对我们来说,以16ms的速度实时更新表会更便宜。剩下的就没有必要了,因为事件模型的速度并不快。我们说的是重绘负荷。

因此,有很多事情要争取。

ZS:把暂停放在16毫秒,好吧,处理器在峰值时只有1.5%的负载,这里是抓紧时间,注意笔记本处理器的情况!

我对争论不感兴趣,我只是想检查一下MQL5+.Net的能力--一切工作都非常酷!"。

 
Igor Makanu:

那么就有一些东西要争取。

SZY:在16毫秒处放一个停顿,处理器在峰值时只有1.5%的负载,这里的时刻,注意是笔记本的处理器!

检查MQL5+.Net的能力是很有趣的--一切工作都非常酷!"。

因此,我们没有检查过它。也就是说,我们还没有对它们进行比较。我创建了两个类似的表格--在MCL和夏普中,看看在16毫秒时重绘它们的单元格时,它们各自给出的负载是什么。关于MKL,我提供了一个表格。现在,我们需要对夏普采取同样的措施。然后就会清楚谁在前面。

我要补充的是,sharp表应该通过dll连接到MT5,然后进行比较。

 
Реter Konow:

所以我们没有检查。就是说,我们没有比较过。我们需要创建两个类似的表格--在MKL上和在夏普上,看看在16ms的时间内重绘其单元格时,每个表格的负载是多少。关于MKL,我提供了一个表格。现在,我们需要对夏普采取同样的措施。然后就会清楚谁在前面。

我再补充一点,锐利的表格应该通过dll连接到MT5,然后进行比较。

我不买账--我知道不会有什么变化,好吧,如果你滚动50-100个值并将它们填入表格的3列中,就会增加0.1ms

你可能认为你已经打败了微软和他们的.Net ))))

ZS:我很满意.Net上的代码,我花了15分钟写完,总共约50行,工作速度很快,没有发现任何滞后;)

 
Igor Makanu:

我不买账--我知道不会有什么变化,好吧,当你发送50-100个值并将它们填入表格的3列时,会增加0.1毫秒。

你可能认为你已经打败了微软和他们的.Net ))))

SZZY:我很舒服,我花了15分钟写完了.Net代码,总共大约50行,工作速度很快,没有发现任何滞后;)

没有战斗就没有胜利......))

我愿意打赌,很快我就会在构建GUI的速度上击败夏普的GUI设计器。通过跳跃式的发展。

此刻检查出来了。它不是为快速构建而准备的。可惜了他......))))

 
Реter Konow:

我刚刚看了一下。他在速度建设方面不接地气。怜悯他......)

嗯...你是一个蹩脚的彼得--而且是一个罕见的彼得)))))。

夏普最大限度地接近C++,生产力的差异,嗯,最大5%,然后可能没有生产力的差异--在C++上写简单的任务需要很长的时间,在Net上,所有的原始任务都在一小时内完成,最多是一天;)

我正要去工作,但我已经在三次点击中增加了2个列,并从MQL5转发到.dll,现在3x50=150个双数(3个50的数组)。

衡量现在的速度--请记住,现在滚动条 需要资源--完全更新的WinForm

这里是100000次更新前的相同测试

2020.03.15 00:12:21.812 tst_T (EURUSD,H1) no1: loops=1000 ms=1610

2020.03.15 00:12:38.382 tst_T (EURUSD,H1) no.2: loops=10000 ms=16562

2020.03.15 00:15:19.642 tst_T (EURUSD,H1) #3: loops=100000 ms=161250

例如,在我的笔记本电脑上,带滚动条的窗口和153个单元格的表格中,.Net上的WinForm在1.6ms内更新。

附加的文件:
MQL5.zip  209 kb