绕过MQL4和MQL5中的Digits(),获取任何数字的小数位数(不仅仅是引号)。 - 页 15 1...8910111213141516171819202122 新评论 Ilya Malev 2018.12.07 20:22 #141 Igor Makanu:如果ArrayCopy()是以与Cysh memmove()相同的方式进行。我认为ArrayCopy()的速度取决于内存分配的速度,如果中间缓冲区的内存已经准备好供复制,ArrayCopy()将很快被执行,如果内存没有分配,你将开始请求操作系统分配内存你可以试着测试一下--用一个大的数据量调用ArrayCopy(),从而为交换缓冲区内存做准备,然后用ArrayCopy()做一个循环,用一个较小的数据量来复制,然后测量速度在我们目前的例子中,复制是在静态数组中执行的,但在一般情况下,当ArrayCopy比简单的for慢的时候,当然是很有意思的。如果你需要分配内存,无论你怎么做,你都必须这样做。 Igor Makanu 2018.12.07 20:40 #142 Ilya Malev:在我们目前的例子中,复制是向静态数组进行的,但在一般情况下,当ArrayCopy比简单的for慢时,当然是很有趣的。如果我们需要分配内存,无论如何我们都要这样做。静态或动态并不重要,我们不知道ArrayCopy()是如何实现的,我只是假设它是标准Cish函数的一个 "包装器",memmove()通常通过额外的缓冲器工作...好吧,像往常一样,这就是以前的写法,很难说是怎样的,哪个编译器在工作。 SZY: 我只是不知道如何测试MQL的运行时间(((-我试过几次,我想我从帮助中取了例子,结果不知为何大不相同,出于需要,我忽略了这个问题-我不测试性能,我通常在剖析器中 查看,什么和如何执行的时间 Ilya Malev 2018.12.07 21:02 #143 Igor Makanu:我只是不知道如何测试MQL的执行速度((()--我试过几次,我想我是从帮助中取的例子,但结果由于某种原因而大相径庭,所以我放弃了这个问题,因为我不测试性能,我通常使用剖析器来 查看如何执行和什么执行的时间这是最简单的方法,我在上面使用了这个方法 #property strict #define test(M,S,EX) {uint mss=GetTickCount();int nn=(int)pow(10,M);for(int tst=0;tst<nn;tst++){EX;} \ printf("%s: loops=%i ms=%u",S,nn,GetTickCount()-mss);} void OnStart() { int arr1[100]={0},arr2[100]={0}; test(7,"Копирование через ArrayCopy",ArrayCopy(arr1,arr2)) test(7,"Копирование через for",for(int i=0;i<100;i++)arr1[i]=arr2[i]) } Igor Makanu 2018.12.07 21:05 #144 Ilya Malev:这是我使用的最简单的方法。 谢谢,我知道了,我明天会测试的。 fxsaber 2018.12.07 21:41 #145 Ilya Malev:是的,这将工作得更 快(在可能的情况下,用ArrayCopy代替,其余的都一样)。 我告诉过你,我没有经过任何测试就写了第一个想到的东西))。这个变体与我的 没有什么不同。测量结果(10次尝试中的最少时间)证明了这一点。 https://www.mql5.com/ru/forum/287618/page14#comment_9807465 TicksToIntArray_fxsaber2 Time[TicksToIntArray(TicksIn,Array)] = 301036 IntArrayToTicks_fxsaber2 Time[IntArrayToTicks(Array,TicksOut)] = 315109 true https://www.mql5.com/ru/forum/287618/page14#comment_9808274 TicksToIntArray_antfx1 Time[TicksToIntArray(TicksIn,Array)] = 216101 IntArrayToTicks_antfx1 Time[IntArrayToTicks(Array,TicksOut)] = 203610 true https://www.mql5.com/ru/forum/287618/page14#comment_9810247 TicksToIntArray_antfx2 Time[TicksToIntArray(TicksIn,Array)] = 303656 IntArrayToTicks_antfx2 Time[IntArrayToTicks(Array,TicksOut)] = 312008 true 你可以看到,带周期的变体更快,因为周期为60/4=15个元素。 附加的文件: StructToArray.mq5 8 kb Ilya Malev 2018.12.07 21:50 #146 fxsaber:这个变体与我的 没有什么不同。显然是的,只有结构类型和数组类型是任意的。 Ilya Malev 2018.12.07 21:51 #147 fxsaber:你可以看到,循环变体更快,因为60/4=15个元素的循环。奇怪的是,在同样的MqlTicks 和int.Level中,我得到了比ArrayCopy更快的速度。 fxsaber 2018.12.07 22:11 #148 Ilya Malev:奇怪的是,我在同样的MqlTicks 和int.Ltd.下得到了比ArrayCopy更快的速度。我在MT5x64中运行它。 Ilya Malev:显然,是的,但结构类型和数组类型是任意的。我特意避开了常见的案例,以便让更多人参与进来。 到目前为止 https://www.mql5.com/ru/forum/287618/page14#comment_9808274 TicksToIntArray_antfx1 Time[TicksToIntArray(TicksIn,Array)] = 213426 IntArrayToTicks_antfx1 Time[IntArrayToTicks(Array,TicksOut)] = 202693 true https://www.mql5.com/ru/forum/287618/page14#comment_9807465 TicksToIntArray_fxsaber3 Time[TicksToIntArray(TicksIn,Array)] = 192362 IntArrayToTicks_fxsaber3 Time[IntArrayToTicks(Array,TicksOut)] = 159932 true Ilya Malev 2018.12.07 22:26 #149 fxsaber:在MT5x64中运行。特意绕过了一般情况,以便更多的人可以参与。到目前为止。我猜你的代码已经比较快了 :) 我必须在那里添加大量的服务代码,以改善ArrayCopy 的功能(源开始,目的地开始,计数),并检查参数的正确性... 总的来说,你有这么多很酷的作品/库,你在论坛上询问和讨论最佳解决方案,这很奇怪 :) fxsaber 2018.12.07 22:44 #150 Ilya Malev:很奇怪,你在论坛上询问和讨论最佳解决方案 :)我需要一个用于HistoryTicks图书馆。谢谢你的参与。 1...8910111213141516171819202122 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
如果ArrayCopy()是以与Cysh memmove()相同的方式进行。
我认为ArrayCopy()的速度取决于内存分配的速度,如果中间缓冲区的内存已经准备好供复制,ArrayCopy()将很快被执行,如果内存没有分配,你将开始请求操作系统分配内存
你可以试着测试一下--用一个大的数据量调用ArrayCopy(),从而为交换缓冲区内存做准备,然后用ArrayCopy()做一个循环,用一个较小的数据量来复制,然后测量速度
在我们目前的例子中,复制是在静态数组中执行的,但在一般情况下,当ArrayCopy比简单的for慢的时候,当然是很有意思的。如果你需要分配内存,无论你怎么做,你都必须这样做。
在我们目前的例子中,复制是向静态数组进行的,但在一般情况下,当ArrayCopy比简单的for慢时,当然是很有趣的。如果我们需要分配内存,无论如何我们都要这样做。
静态或动态并不重要,我们不知道ArrayCopy()是如何实现的,我只是假设它是标准Cish函数的一个 "包装器",memmove()通常通过额外的缓冲器工作...好吧,像往常一样,这就是以前的写法,很难说是怎样的,哪个编译器在工作。
SZY: 我只是不知道如何测试MQL的运行时间(((-我试过几次,我想我从帮助中取了例子,结果不知为何大不相同,出于需要,我忽略了这个问题-我不测试性能,我通常在剖析器中 查看,什么和如何执行的时间
我只是不知道如何测试MQL的执行速度((()--我试过几次,我想我是从帮助中取的例子,但结果由于某种原因而大相径庭,所以我放弃了这个问题,因为我不测试性能,我通常使用剖析器来 查看如何执行和什么执行的时间
这是最简单的方法,我在上面使用了这个方法
这是我使用的最简单的方法。
谢谢,我知道了,我明天会测试的。
是的,这将工作得更 快(在可能的情况下,用ArrayCopy代替,其余的都一样)。
我告诉过你,我没有经过任何测试就写了第一个想到的东西))。
这个变体与我的 没有什么不同。测量结果(10次尝试中的最少时间)证明了这一点。
你可以看到,带周期的变体更快,因为周期为60/4=15个元素。
这个变体与我的 没有什么不同。
显然是的,只有结构类型和数组类型是任意的。
你可以看到,循环变体更快,因为60/4=15个元素的循环。
奇怪的是,在同样的MqlTicks 和int.Level中,我得到了比ArrayCopy更快的速度。
奇怪的是,我在同样的MqlTicks 和int.Ltd.下得到了比ArrayCopy更快的速度。
我在MT5x64中运行它。
显然,是的,但结构类型和数组类型是任意的。
我特意避开了常见的案例,以便让更多人参与进来。
到目前为止
在MT5x64中运行。
特意绕过了一般情况,以便更多的人可以参与。
到目前为止。
我猜你的代码已经比较快了 :)
我必须在那里添加大量的服务代码,以改善ArrayCopy 的功能(源开始,目的地开始,计数),并检查参数的正确性...
总的来说,你有这么多很酷的作品/库,你在论坛上询问和讨论最佳解决方案,这很奇怪 :)
很奇怪,你在论坛上询问和讨论最佳解决方案 :)
我需要一个用于HistoryTicks图书馆。谢谢你的参与。