MQL4およびMQL5でDigits()をバイパスして任意の数値(引用符だけでなく)の小数点以下桁数を取得 - ページ 15 1...8910111213141516171819202122 新しいコメント Ilya Malev 2018.12.07 20:22 #141 Igor Makanu:ArrayCopy()がCysh memmove()と同じ方法で行われた場合。ArrayCopy()の実行速度は、メモリの確保速度に依存すると思います。中間バッファのメモリがコピーできる状態であれば、ArrayCopy()は非常に速く実行されますが、メモリが確保されていない場合は、OSにメモリの確保を 要求するようになるでしょう。大きなデータ量でArrayCopy()を1回呼び出し、交換用のバッファメモリを準備した後、小さなデータ量で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 要素のサイクルなので、サイクルを持つ variant の方が高速であることがわかるでしょう。 ファイル: 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でArrayCopyより速くなりました。 fxsaber 2018.12.07 22:11 #148 Ilya Malev:不思議なことに、同じMqlTicksと intでArrayCopyより速くなりました。MT5x64で動かしています。 イリヤ・マレフどうやらそうらしいが、構造体の型と配列の型は任意である。より多くの人に参加してもらうために、あえて一般的なケースを避けました。 これまで 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の 機能(source start, dest start, count)を向上させ、パラメータが正しいかどうかをチェックするために、そこに多くのサービスコードを追加しなければならない......。 一般的に、あなたは多くのクールな作品/ライブラリを持っているので、フォーラムで最適な解決策を尋ねたり議論したりするのは不思議なことです :) fxsaber 2018.12.07 22:44 #150 Ilya Malev:フォーラムで最適な解決策を尋ねたり、話し合ったりするのは不思議なものです :)HistoryTicksのライブラリに必要です。ご参加ありがとうございました。 1...8910111213141516171819202122 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
ArrayCopy()がCysh memmove()と同じ方法で行われた場合。
ArrayCopy()の実行速度は、メモリの確保速度に依存すると思います。中間バッファのメモリがコピーできる状態であれば、ArrayCopy()は非常に速く実行されますが、メモリが確保されていない場合は、OSにメモリの確保を 要求するようになるでしょう。
大きなデータ量でArrayCopy()を1回呼び出し、交換用のバッファメモリを準備した後、小さなデータ量でArrayCopy()をループし、速度を測定することができます。
今回の例では、静的配列でコピーを実行していますが、一般的には、もちろん、ArrayCopyが単純なforよりも遅い場合は、面白いです。メモリを確保する必要がある場合は、どのような方法であっても、いずれにせよそれを行う必要があります。
今回の例では、静的配列にコピーしていますが、一般的には、もちろん、ArrayCopyが単純なforよりも遅い場合は、面白いです。メモリを確保する必要があるのなら、いずれにせよやらなければならないことだ。
静的か動的かは関係なく、ArrayCopy()がどのように実装されているか分からないので、Cishの標準的な関数の「ラッパー」だと思っただけで、memmove()は通常追加のバッファを介して動作します...。まあ、例によって以前の書き方なので、どのコンパイラがどう動くかは分かりませんが
SZY: MQLでランタイムをテストする方法がわからないんです(( - 何度か試したし、ヘルプから例も取ったと思うのですが、結果はなんだかとても違っていて、必要に迫られてこの質問を無視しました - パフォーマンスのテストはしていません、通常はプロファイラで、何がどのように時間内に実行されているのかを見ます
ただ、MQLで実行速度をテストする方法がわかりません(( - 何度か試して、ヘルプから例を取ったと思いますが、結果はなぜか全く違っていたので、この問題はあきらめました。私はパフォーマンステストをせず、通常はプロファイラを使って、 時間内にどのように、何が実行されるかを確認するためです
一番簡単な方法はこちらです。
以下は、私が使った最も簡単な方法です。
ありがとうございます、わかりました、明日テストします
はい、この方がずっと 速く動作します(可能な限りArrayCopyで置き換え、その他は同じです)。
だから、テストもせずに最初に思いついたことを書いたってばよ))
このバリエーションは、私の ものと変わりません。測定値(10回試行したうちの最短時間)がそれを証明しています。
60 /4 = 15 要素のサイクルなので、サイクルを持つ variant の方が高速であることがわかるでしょう。
このバリエーションは、私の ものと変わりません。
どうやらそうみたいですね、構造体の型と配列の型だけは任意です。
60 /4 = 15 要素のループのため、ループバリアントが高速であることがわかります。
不思議なことに、同じMqlTicksと intでArrayCopyより速くなりました。
不思議なことに、同じMqlTicksと intでArrayCopyより速くなりました。
MT5x64で動かしています。
どうやらそうらしいが、構造体の型と配列の型は任意である。
より多くの人に参加してもらうために、あえて一般的なケースを避けました。
これまで
MT5x64で動作しています。
より多くの人が参加できるように、あえて一般的なケースを回避した。
これまでのところ
あなたのコードはすでに高速化しているのでしょう :)
ArrayCopyの 機能(source start, dest start, count)を向上させ、パラメータが正しいかどうかをチェックするために、そこに多くのサービスコードを追加しなければならない......。
一般的に、あなたは多くのクールな作品/ライブラリを持っているので、フォーラムで最適な解決策を尋ねたり議論したりするのは不思議なことです :)
フォーラムで最適な解決策を尋ねたり、話し合ったりするのは不思議なものです :)
HistoryTicksのライブラリに必要です。ご参加ありがとうございました。