エラー、バグ、質問 - ページ 975

 

訂正します。ビットマップの性能はタグに比べ16%〜25%( 要素数による)劣りますが 、先ほど書いたような桁違いの差ではありません。

最初にツールを習得する際に、コードにエラーや非効率があったのでしょう。

そのコードを添付します。

トーロク

信じてください、私はあなた=私を欺く動機はひとつ もないのです。最初の実験では、テスターでビットマップを観察しました。残念ながら、再現できません。:(

ファイル:
 
voix_kas:

...

トーロク

信じてください、私はあなた=私を欺く動機はひとつ もないのです。最初の実験では、テスターでビットマップを観察しました。残念ながら、再現できません。:(

オッケーです。開発者がこの機能を実装するのを待ってから、きちんとテストしてみましょう。)))
 

また、フォントの表示の違いについても、開発者の方々に注意していただきたいと思います。


左がビットマップ、右がラベルです。設定はすべて同じですが、ビットマップの方がフォントが若干太く描かれて います。

質問は批判的なものではありません。しかし、注文には注意が必要です。:)

 
voix_kas:

また、フォントの表示の違いについても、開発者の方々に注意していただきたいと思います

左がビットマップ、右がラベルです。設定はすべて同じですが、ビットマップの方が若干太いフォントで描画 されています。

この問題はクリティカルではありません。しかし、秩序を保つためには、注意を払う必要があります。:)

また、ビットマップに使用したフォントの太さを設定するフラグは 何ですか?
 
voix_kas:

訂正します。ビットマップの性能はタグに比べ16%〜25% 劣りますが (要素数による)、先ほど書いたように桁違いというわけではありません。


しかし、あなたのテストは間違っています。

変更のたびにChartRedrawを使用 します。つまり、実際には10000回のChartRedrawをテストしていることになります。こんなのおかしいよ。

ラベルとビットマップのどちらが早く変化するかを見極めるのが課題です。そして、その後のチャート上のアウトプットでもない。

ChartRedrawをループ内に残した場合のテスト結果です。

ビットマップ更新時間=40980。
ラベルを更新する時間=41777。

(つまり、ビットマップはラベルよりもわずかに速いのです)。

また、ChartRedrawがループ内に ある場合、ラベルの数とビットマップの幅は 何も影響 しないことに注意してください。つまり、この状況ではChartRedraw関数が最も遅いのです。

---

ChartRedrawをループから外すと、全く異なる数値が得られます。

ビットマップ更新時間=5788。
ラベルの更新時間=234。

ということで、タグ付き端末はビットマップの20 速いです


で、ここではもちろん、すでにビットマップの高さ依存性を見ることができます。

ビットマップ更新時間=51355。
ラベルの更新時間=1108。
50 倍差

マークの座標は変更しないでください。

となる

ビットマップ更新時間=25054。

百点満点の差は25倍です。


ですから、ビットマップを扱う限りは、ご覧のように本当に遅いのです。

配列+WinGdi TextOut+ResourceCreateの作成を常に繰り返すこと=ネイティブMTオブジェクトに少なくとも1桁、いや50 倍は劣るということを明確に示して います。

だから、MTを拒否してはいけないのです。グラフやヒストグラムを描くのにとても便利でしょう。

Документация по MQL5: Операции с графиками / ChartRedraw
Документация по MQL5: Операции с графиками / ChartRedraw
  • www.mql5.com
Операции с графиками / ChartRedraw - Документация по MQL5
 
tol64:
また、ビットマップに使用したフォントの太さを設定するフラグは 何ですか?

デフォルトは0なので、明示的に設定しない。添付のソースコードで確認することができます。

また、異なるフラッグを使った「遊び」を追加しても、統一には至らなかった。

 
sergeev:

...

ラベルとビットマップのどちらが速く修正できるかを調べるのが目的です。その後のチャートへの出力ではありません。

...

ChartRedraw()関数の ループからの削除は、テキストラベルのプロパティ変更という「原子操作」を端末のビデオモータが処理することはないため、誤りである。

ChartRedraw()を呼び出したときのみ、異なるオブジェクトからのアルファチャンネル画像の相互オーバーラップを含む、ウィンドウ全体が描画されます。

この仮説は、テキストラベルを持つスクリプトのコードプロファイラによって厳密に確認された。

ビットマップに関しては、TextOut()関数がボトルネックになっています。

 
voix_kas:

...

ビットマップに関しては、TextOut()関数がボトルネックになっています。

その方がわかりやすいですね。))

 
tol64:

その方が分かりやすいですよね。))

私もそう思います。:)

セルゲイ

...

ChartRedrawをループ内に残した場合のテスト結果は以下の通りです。

ビットマップ更新時間=40980。
ラベルのリフレッシュ時間=41777。

(タグよりもビットマップの方がわずかに速いなど)。

不思議なことに、私は逆のイメージを持っています。

 

Argb_normalize は、色の正規化に余分なコストがかかるので、使用しない方がよいでしょう。シンプルなものはピュアな色で描いたほうがいい。

また、ビデオカードの2D機能をフルに活用するため、速度も直接かつ強く影響します。例えば、初歩的なグラフィックカードを 搭載した弱小ノートパソコンでは、レンダリングが 遅く、出力方法の違いも大きくなります。

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Стили рисования
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Стили рисования
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы индикаторов / Стили рисования - Документация по MQL5