MQL4およびMQL5でDigits()をバイパスして任意の数値(引用符だけでなく)の小数点以下桁数を取得 - ページ 20

 
Алексей Тарабанов:

その結果とは?

速度
 
fxsaber:

多重性は、問題の条件である。

シンプルに、パズル?

 
Алексей Тарабанов:

単純に、パズル?

実践的なアプリケーション

トレーディング、自動売買システム、ストラテジーテストに関するフォーラム

MetaTrader 5 build 1930の新バージョン:MQL5におけるフローティング・チャート・ウィンドウと.Netライブラリ

fxsaber さん 2018.12.09 00:18

この例では、15倍高速に動作するようになりました

1000000
Time[TestResource()] = 286646


大雑把に言うと、リソースのフル書き込み/読み出しのティックサイクルは、1秒間に400万ティックで動作しています。


トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

MQL5でマルチスレッド非同期WebRequestを自分の手で」記事に関するディスカッション

fxsaber さん 2018.12.09 00:52

更新されたResource_Data.mqhを試してみると、Webページの転送の遅れが解消されるはずです。

#include <fxsaber\TradeTransactions\ResourceData.mqh> // https://www.mql5.com/ru/code/22166

#define  BENCH(A)                                                              \
{                                                                             \
  const ulong StartTime = GetMicrosecondCount();                              \
  A;                                                                          \
  Print("Time[" + #A + "] = " + (string)(GetMicrosecondCount() - StartTime)); \
}  

const RESOURCEDATA<uchar> Resource("::" + __FILE__); // Ресурс для передачи данных (байты)
uchar BytesIn[];
const int Init = ArrayResize(BytesIn, 1000000);

void TestResource()
{
  uchar BytesOut[];

  Resource = BytesIn;
  Print(Resource.Get(BytesOut));
}

void OnStart()
{
  BENCH(TestResource());
}


旧バージョン

1000000
Time[TestResource()] = 103746


新バージョン

1000000
Time[TestResource()] = 5222
 
Ilya Malev:

ランダムなサンプルに対して、通常の組み込みArraySortとのソート速度の比較はありますか? 少なくとも、ランダムなデータを平均的に速くソートする方法があれば...。

あるいは速くはないが、少なくとも同じである。あるいは速くはないが、少なくとも2倍以上の長さはない。マルチスレッドのようなDllや他のものを使用せずに

ソースコードがあるので、自分で測定することができます。

 
Lazybones。
 
Nikolai Semko:
乗り越えられない。
パソコンに向かったら、必ず参加します。
ざっと見たところ、すでに10~20%程度改善するアイデアが浮かんでいます。

すでに 最大性能で止まって いますね。

 
fxsaber:

すでに 最高性能にロック オンされているのではと思うのですが。

もしかしたら、私が気づいていないことがあるのかもしれません。しかし、1種類のユニオンを使うだけなら、まだ可能性があります。
 
Nikolai Semko:
私が気づいていないことがあるかもしれない。しかし、1種類のユニオンを使うだけなら、まだ可能性があります。

間違っていてよかった。

 
Алексей Тарабанов:
Lazybones。
酒臭いぞ同志中佐、飲むのをやめなさい。
 
fxsaber:

間違っていてよかった。

今、向かっているところです。自分でやってみてもいいかもしれません。10、100、1000、10000...といった異なるサイズの構造体の配列でユニオンを使用することである。
これにより、ループが桁違いに短くなり、ArrayCopyの呼び出し 回数も桁違いに少なくなります。
これはmemcopyの変種に近いはずです。