对OOP的帮助 - 页 6 123456789 新评论 Aliaksandr Hryshyn 2021.09.29 16:29 #51 不要忘了去除静电 PapaYozh 2021.09.29 16:29 #52 fxsaber #:我看不出有什么问题。 你必须把 "unlion u_Data_t "前面的 "static "删除。 static union u_Data_t fxsaber 2021.09.29 16:32 #53 PapaYozh #:所以你必须把 "unlion u_Data_t "前面的 "static "去掉。 Release: 12487.905 Debug: 9357.236 b3062.事实上,分歧的方向是错误的。 Aliaksandr Hryshyn 2021.09.29 16:32 #54 数字是这样的,在之前的测试之后,代码被稍微优化了。 没有静态调试和发布,最后有静态发布 174.326 13513.946 46.408 Aliaksandr Hryshyn 2021.09.29 16:34 #55 fxsaber #:b3062.事实上,这种差异的方向是错误的。 所以你有一个小的差异 fxsaber 2021.09.29 16:36 #56 Aliaksandr Hryshyn #:所以你有一个小的差异 在最新构建的分支中写上完整的代码和结果。这样的结构是无法通过开发商的。 Vasiliy Sokolov 2021.09.29 17:00 #57 fxsaber #:答案最好是马上就有。并不总是有时间进行实验。 #define ARRAY_SIZE int(100) #include <Arrays\ArrayObj.mqh> class Test : public CObject { public: int a; double b; datetime c; Test(){}; Test(int ai){this.a = ai;} }; int COUNT = 1000000; void OnStart() { FooV3(); } void FooV1() { long t = GetMicrosecondCount(); Test array[]; ArrayResize(array, COUNT); for(int i = 0; i < COUNT; i++) array[i] = Test(MathRand()); long delta = GetMicrosecondCount() - t; printf(delta); } void FooV2() { long t = GetMicrosecondCount(); Test* array[]; ArrayResize(array, COUNT); for(int i = 0; i < COUNT; i++) array[i] = new Test(MathRand()); long delta = GetMicrosecondCount() - t; printf(delta); } void FooV3() { long t = GetMicrosecondCount(); Test* array[]; ArrayResize(array, COUNT); for(int i = 0; i < COUNT; i++) array[i] = new Test(MathRand()); for(int i = 0; i < COUNT; i++) delete (array[i]); long delta = GetMicrosecondCount() - t; printf(delta); } 简而言之:没有指针会更快。我有1.2秒没有指针(V1),1.4秒有指针(V2)。1.6 - 带指针和删除(V3)。 Dmitry Fedoseev 2021.09.29 17:18 #58 用new和方法调用创建的对象比较慢...以防你不知道))))) fxsaber 2021.09.29 17:45 #59 Vasiliy Sokolov #:简而言之:没有指针会更快。我有1.2秒没有指针(V1),1.4秒有指针(V2)。1.6 - 带指针和删除(V3)。 这种比较是不正确的,因为它没有考虑到自动删除对象的时间。 经修改。 #include <Arrays\ArrayObj.mqh> class Test : public CObject { public: int a; double b; datetime c; Test(){}; Test(int ai){this.a = ai;} }; int COUNT = 1000000; #include <fxsaber\Benchmark\Benchmark.mqh> // https://www.mql5.com/ru/code/31279 void OnStart() { Print(MQLInfoInteger(MQL_MEMORY_USED)); _BV(FooV1(), 1); Print(MQLInfoInteger(MQL_MEMORY_USED)); _BV(FooV3(), 1); Print(MQLInfoInteger(MQL_MEMORY_USED)); } void FooV1() { Test array[]; ArrayResize(array, COUNT); for(int i = 0; i < COUNT; i++) array[i] = Test(MathRand()); } void FooV3() { Test* array[]; ArrayResize(array, COUNT); for(int i = 0; i < COUNT; i++) array[i] = new Test(MathRand()); for(int i = 0; i < COUNT; i++) delete (array[i]); } 1 Alert: Bench_Stack = 0, 1 <= Time[Test19.mq5 532 in OnStart: FooV1()] = 108805 mcs. 1 Alert: Bench_Stack = 0, 1 <= Time[Test19.mq5 534 in OnStart: FooV3()] = 116705 mcs. 123 V3之后的123兆字节从何而来,我不知道。 Dmitry Fedoseev 2021.09.29 18:28 #60 以下是相同的功能,以供比较。 void f1(){ CX x[10]; } void f2(){ CX * x[10]; for(int i=0;i<10;i++){ x[i]=new CX(); } for(int i=0;i<10;i++){ delete x[i]; } } 123456789 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我看不出有什么问题。
你必须把 "unlion u_Data_t "前面的 "static "删除。
所以你必须把 "unlion u_Data_t "前面的 "static "去掉。
b3062.事实上,分歧的方向是错误的。
数字是这样的,在之前的测试之后,代码被稍微优化了。
没有静态调试和发布,最后有静态发布
b3062.事实上,这种差异的方向是错误的。
所以你有一个小的差异
所以你有一个小的差异
在最新构建的分支中写上完整的代码和结果。这样的结构是无法通过开发商的。
答案最好是马上就有。并不总是有时间进行实验。
简而言之:没有指针会更快。我有1.2秒没有指针(V1),1.4秒有指针(V2)。1.6 - 带指针和删除(V3)。
简而言之:没有指针会更快。我有1.2秒没有指针(V1),1.4秒有指针(V2)。1.6 - 带指针和删除(V3)。
这种比较是不正确的,因为它没有考虑到自动删除对象的时间。
经修改。
V3之后的123兆字节从何而来,我不知道。
以下是相同的功能,以供比较。