キャンバスとラベルの比較 - ページ 9

 
ラベルへのテキスト出力は、キャンバスがクリアされてもいないのに、テキストにスカルプトしていたのに、キャンバスへのテキスト出力より100倍も速いのです。
 
Alexey Viktorov:

ディミトリ、何かを判断する前に、それがどこから始まったのかを理解する必要がある......。

私の記憶違いでなければ、どこかに50行と書いてあったような...

どこから始まったのか?現実逃避で?

 
Dmitry Fedoseev:
kanvasはクリアでもなく、テキストにテキストをスカルプトしていたのに、kanvasよりlabelにテキストを出力する方が100倍速い。

近々、Kanvasも十分速いというテストを発表する予定です。そして、KBの該当するソースコードも更新しておきます。後でわかったことですが、単位時間当たりの更新回数を制限するためです。上の書き込みをご覧ください、そこで議論されていました。まずはこの記事からhttps://www.mql5.com/ru/forum/364640/page6#comment_21290218。

 
Mihail Matkovskij:

近々、Kanvasも十分速いというテストを発表する予定です。そして、KBの該当するソースコードも更新しておきます。後でわかったことですが、単位時間当たりの更新回数を制限するためです。上の書き込みをご覧ください、そこで議論されていました。まずはこの記事からhttps://www.mql5.com/ru/forum/364640/page6#comment_21290218。

しかも空想ではなく、現実に適用されるであろうコードの性能を測定しているのです。そして、どこで何をレンダリングしているかは全く気にせず、プログラムの最終的な実行時間を計測しています。

 
TextOut()を1回呼び出すだけの純粋な比較でも、ラベルにテキストを出力するよりも70倍も遅いのです。
 
Dmitry Fedoseev:

しかも空想ではなく、現実に適用されるであろうコードの性能を測定しているのです。

Dmitry Fedoseev:
TextOut()を1回だけ呼び出すという純粋に馬鹿げた比較でさえ、ラベルにテキストを出力するよりも70倍も遅いのです。

いらない、理解できないという方は、こちらを引用してください。

Renat Fatkhullin:

Nikolaiの言う通り、ラベルのプロパティを編集しても、ラベルのレンダリングには何の関係もありません。

ラベルは、チャート上の他のオブジェクトと同様に、MQL5プログラムの動作とは全く別のスレッドで独立して描画されます。ロボットはチャートの強制再描画を依頼するのみで、描画時間を計測することはできない。オブジェクトを使ったチャート描画は完全に非同期です。

しかし、レンダリングキャンバスは、ロボットの流れの中で直接行われ、その後、チャートの独立したレンダリングの間に、ウィンドウのコンテキストで準備ができてビットマップのネイティブBitBlitを行うために残っているので、簡単に測定することができます。この操作は初歩的なもので、ビデオカードによってうまく加速されます。

テキストラベルでは、TTFフォントのSetFont/TextOutはかなり高価です。
 
Mihail Matkovskij:

いらない、意味がないと思ったら、見積もりを取る。

そして、私はすでにここで あなたに答えています

 
Dmitry Fedoseev:

そして、私はすでにここで あなたに答えています

MetaQuotesのディレクター と議論するつもりですか?

 
Mihail Matkovskij:

MetaQuotesのディレクター に反論するのか?

意見の相違はありません。

 
Dmitry Fedoseev:
TextOut()を1回呼び出すだけの純粋な比較でも、ラベルにテキストを出力するよりも70倍も遅いのです。

これは、チャートのレンダリングが別スレッドで行われるためです。一方、OBJ_BITMAP_LABEL のピクセル配列処理は、ビットマップにピクセルを渡すだけでなく、それを使用するアプリケーションと同じスレッドにあります。したがって、OBJ_BITMAP_LABELはアプリケーションの速度を低下させるかもしれませんが、ビットマップがあまり頻繁に更新されない場合は、それほど顕著 ではありません。ちょうど私が以前行ったテストでは、OBJ_BITMAP_LABELが 同じ理由で大幅な速度低下を引き起こしていました。しかし、ビットマップの更新頻度を制限すれば、ラベルを使った場合よりもさらに良い結果が得られます。また、ビットマップの更新速度を制限すれば、OBJ_BITMAP_LABELよりも わずかに速くなります(別スレッドでレンダリングするため)。単純に、人間の目が認識できる以上の頻度でオブジェクトを更新しても意味がないのです。したがって、ラグ、頻繁に更新すると、チャートのすべてのオブジェクトを。