OOPに関するヘルプ - ページ 6 123456789 新しいコメント Aliaksandr Hryshyn 2021.09.29 14:29 #51 静電気除去を忘れずに PapaYozh 2021.09.29 14:29 #52 fxsaber #:問題がわからない。 union u_Data_t" の前にある "static" を削除する必要があります。 static union u_Data_t fxsaber 2021.09.29 14:32 #53 PapaYozh #:そこで、"union u_Data_t "の前にある "static "を削除する必要があります。 Release: 12487.905 Debug: 9357.236 b3062.確かに、乖離の方向は間違っている。 Aliaksandr Hryshyn 2021.09.29 14:32 #54 数値はこんな感じです。前回のテスト後、コードを少し最適化しました。 静的デバッグとリリースなし、最後に静的リリースあり 174.326 13513.946 46.408 Aliaksandr Hryshyn 2021.09.29 14:34 #55 fxsaber #:b3062.確かに、この乖離は間違った方向にある。 だから、小さな違いがあるのですね fxsaber 2021.09.29 14:36 #56 Aliaksandr Hryshyn #:だから、小さな違いがあるのですね 最新のビルドのブランチに、完全なコードと結果を書き込んでください。そんな建前は、開発者の心を通わせない。 Vasiliy Sokolov 2021.09.29 15: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); } 簡単に言うと、ポインターを使わない方が速いということです。ポインタなし(V1)で1.2秒、ポインタあり(V2)で1.4秒です。1.6 - ポインタと削除を含む (V3). Dmitry Fedoseev 2021.09.29 15:18 #58 newやメソッドコールで作成されたオブジェクトは遅くなる...。一応言っておきますが)))) fxsaber 2021.09.29 15:45 #59 Vasiliy Sokolov #:簡単に言うと、ポインタがない方が早いということです。ポインタなし(V1)で1.2秒、ポインタあり(V2)で1.4秒です。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 16: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千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
問題がわからない。
union u_Data_t" の前にある "static" を削除する必要があります。
そこで、"union u_Data_t "の前にある "static "を削除する必要があります。
b3062.確かに、乖離の方向は間違っている。
数値はこんな感じです。前回のテスト後、コードを少し最適化しました。
静的デバッグとリリースなし、最後に静的リリースあり
b3062.確かに、この乖離は間違った方向にある。
だから、小さな違いがあるのですね
だから、小さな違いがあるのですね
最新のビルドのブランチに、完全なコードと結果を書き込んでください。そんな建前は、開発者の心を通わせない。
答えは、できればすぐにでも。いつも実験する時間があるわけではありません。
簡単に言うと、ポインターを使わない方が速いということです。ポインタなし(V1)で1.2秒、ポインタあり(V2)で1.4秒です。1.6 - ポインタと削除を含む (V3).
簡単に言うと、ポインタがない方が早いということです。ポインタなし(V1)で1.2秒、ポインタあり(V2)で1.4秒です。1.6 - ポインタと削除を含む (V3).
この比較は、オブジェクトの自動削除にかかる時間を考慮していないため、正しくありません。
修正されました。
V3以降の123メガバイトがどこから出てくるのか、私にはわかりません。
以下は比較のための同一機能である。