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

 
また、テストを実行し、その結果を書き出す。
 
voix_kas:

...

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

こんな結果になってしまいました。

面白いことになりそうです。
 

タグのテスト時には、完全にMQL5系から派生してインターフェースフローで描画されることを、すっかり忘れていました。MQL5では、ラベルの説明文のみ修正されます。

ビットマップを描画する場合、すべての描画はMQL5内で行われ、インターフェースフローには非常に高速な1つのBitBltだけが残ります。

つまり、マーカーマッピングが全くテストされていないため、テストが完全に間違っているのです。チャートのリフレッシュは非同期コマンドで、インターフェイススレッドにレンダリングの通知を送るだけです。ChartRedrawの コストをかけた画面からもわかるように。

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

アルファチャンネルには美的な魅力があります。グラフィック/ボールの上にテキストが「透過的に」表示される場合、当然のことながら用途が 分かれることになります。

メッセージや統計を表示するだけなら、テキストラベルの方が早い。 コントロール(ボタンなど)を作る場合は、ビットマップ、しかもオプションなしで。そうすれば、アルファチャンネルや透明度を使わずに、矩形領域全体をベタで塗りつぶすことができ、あまりイライラすることもありません。

 
voix_kas:

ChartRedraw()関数の ループからの削除は、テキストラベルのプロパティ変更の「アトミック操作」が端末のビデオエンジンで処理されないため、不正解となります。

そう、ビデオエンジンで配列が扱えないのと全く同じです。

問題は、ビットマップを変更するのとラベルを変更するのと、どちらが速く動作するかということです。

ビットマップロスの作成 - それは確かです。

であり、いずれの場合もチャートのレンダリングは議論の余地があり、二次的なものである。


結果を考えてみてください。 ラベル交換に1サイクル4秒なんて、ナンセンスなことがおわかりいただけるでしょう?

ラベルの変更は、チャートのレンダリングサブシステムに干渉することなく、純粋に変更点のみをチェックする必要があります。

でなければ、ビットマップでも同等の数値が表示されるはずです。

 
Renat:

ラベルテストの時は完全にMQL5系から派生してインターフェイススレッドに描画されることをすっかり忘れていました。MQL5では、ラベルの説明文のみ修正されます。

ビットマップを描画する場合、すべての作業はMQL5内で行われます。

しかし、速度的にはやはりラベルの方がビットマップより速く変化します。GDI機能が遅いから。

つまり、マークマッピングは全くテストされていないので、テストが完全に間違っているのです。チャートのリフレッシュは、描画するインターフェーススレッドにのみ通知を送る非同期コマンドです。これは、ChartRedrawのコストをかけたスクリーンショットを見ればわかることです。

その通りです。


このようなベンチマークタスクは誰がやるのでしょうか?

- ラベル(矩形)の束を使い、ビットマップを使ってグラフ(正弦波など)を描画する。
- エクセルテーブル(矩形+テキストラベル)およびビットマップとして描画します。

といったオプションで、MTグラフィックスをビットマップに置き換えることができます。

1つのビットマップと多くのMT オブジェクトをサポートするためのリソースコストを確認します。+ 充填する領域の大きさに依存する。

 

もう一つ、ラベルテストからわかることは、読み取りラベルのない片方向の書き込み動作が非常に経済的であることです。この場合、1回の書き込みに対するコマンドフローの高速パイパー化は最大となる(この場合、あえて効率的なシステムを使用する)。

しかし、実際の業務でよくあることですが、書き込みとオブジェクトデータの読み込みが混在すると、スピードが極端に落ちます。

更新:また、マーカーのテスト例では 重大なエラーが あります- 26ではなく、1つのマーカーに1つの変更のみが行わ れます。出典をご覧ください。

 
Renat:

つまり、ラベルマッピングを全くテストしていないため、テストが完全に間違っているのです。

セルゲイ

タグの変更は、チャートレンダリングサブシステムに振り回されることなく、純粋に変更点をテストする必要があります。

もちろん、私は反対です。議論:ユーザーにとって、状況の変化(stats)をできるだけ頻繁に、毎回のtickで 見ることが望ましい。したがって、統計情報を更新した後、それらを表示する = ChartRedraw()する必要があります。

これはいわば、パフォーマンスの即応性・実用性という意味での話です。

真空中の球形ベンチマークについては、これはオプションです。

 
sergeev:

が、それでもスピード的にはビットマップよりマークの方が速く変化します。GDI機能が遅いから。

いいえ、ラベルを変更する際にGDIメソッドは呼び出されません。µl5ではラベルのレンダリングが全くできない!
 
Renat:

また、ラベルテストの例では 26枚ではなく1枚 しか修正されていないという重大なミスが あります。 ソースを見てください。

説明文ではなく、指標の値を表示するためのラベルのすべて(半分)で文字が変わっています。スクリプトを実行すると、そのことがわかる。

私があなたを理解していないかのどちらかです。特にどのラインのことでしょうか?