キャンバスとラベルの比較

 

ここでは、さまざまな方法で作成したチャートにテキストを表示する際の表示速度を比較したものを紹介したいと思います。最初の表示はCCanvasクラスを使って、2番目の表示はラベル(CChartObjectLabel)を使って作りました。すべてのクラスは標準ライブラリから取得した。このアイデアは、CCanvas で表示を作成したところ、Expert Advisor の 動作が著しく遅くなったときに思いつきました。同時に、一部のプログラマは、私が間違っていると主張し、CCanvas、より正確に言えば、OBJ_BITMAP_LABEL は非常に高速で、MetaTrader で利用できるチャートに情報を表示するすべての方法より高速 です。そこで、実験的に確認することにしました。そこで、正念場。

CCanvasでの 出力による表示操作

キャンバス

現時点でのCPU負荷

CPU

CChartObjectLabel 出力による表示操作。

ラベル

速度最適化モードを有効にしたCChartObjectLabelでの動作(以下でお伝え します)。

ラベルの最適化

さて、次は時間的な価値です。Totalは、テストExpert Advisorの総実行時間です。Min delay、Mid delayMax delayは、ティック単位の遅延時間です。しかし、コードを確認したところ、エラーはなかったものの、必ずしも正しく取得できるわけではありません。テスターのGetTickCount64という関数が関係しているのだと思います。しかし、それは些細な問題です。主なものは、合計時間が表示されることです。

ここで、ラベルの表示の最適化について簡単にお話しします。テキストを画面に表示するためには、上から50個という数で並べられたラベルの中の特別な配列から線を表示する必要があるということです。しかし、最後の行だけを更新する場合は、すべてのラベルを更新する必要はなく、この行に対応する1つのラベルだけを更新すれば十分である。optimizeUpdateモードをONにすると、2倍以上のパフォーマンス向上が得られます。

今回のテスト期間では、スピードの関係上、ラベルへの表示では小さすぎるので、もう少し詳しくテストすることにしました。そのため、テスト期間を長くしました。そして、次のような結果を得ました。

optimizeUpdate なし:false

optimizeUpdate: false

optimizeUpdate: trueの場合

optimizeUpdate: true

すべての結果をExcelに追加しました

結果比較

最初のヒストグラムは全体の比較を示し、2番目のヒストグラムはラベルを持つバリアントのみを示しています。

結論:CChartObjectLabel で作成した表示は、CCanvas で作成した同等の表示よりも 83.7 倍高速になる可能性があります。画素の演算は、すべてのプログラムの中で最もコストがかかると言われているのは、決して無駄ではありません

テスト結果の表を添付します。ソースコードはKB: https://www.mql5.com/ru/code/33898からダウンロード できます。


ファイル:
 

比較対象がVisualiserで、Terminalでないのが理解できないのですが?

コードについては調べていません。そのようなタスクのために、Kanvasは「50ライン」を1つにしています。


ターミナルでは、Usage-bibbleを通して測定しました。各方式とも大きな差はありません。

 
fxsaber:

比較対象がVisualiserで、Terminalでないのが理解できないのですが?

なぜなら、Visualiserでは、Canvasの速度が遅いことが問題になっているからです。そして、その正体を見破ることができる。このような表示は、CPU時間の50%以上を消費することは前述したとおりですまた、Terminalでは、すべてを見るためにループでメソッドを呼び出さなければなりません。でも、そんなの気にしない。オフライン最適化でExpert Advisorをループで動かしていますが、実は、このような高速更新の表示が必要なのです。でも、まだプロジェクトが 完成していないので、今はお見せすることができないんです。


fxsaber

コードについては調べていません。そのようなタスクのために、Kanvasは「50ライン」を1つにしています。

では、ご覧ください。そこにあるのはこれだけ!?

 
誤解を招きそうなので
本当は私のことをこき使いたいんでしょう?
そういうことをしたいんだろうなと思いました。そして、やっぱりこういうのを作ってくるんですね。

比較試験の準備の仕方がわからない。

 
Mihail Matkovskij:

なぜなら、Visualiserでは、Canvasの速度が遅いことが問題になって いるのです。そして、どれがそうなのかがわかる。このような表示は、CPU時間の50%以上を消費することは前述したとおりですまた、Terminalでは、すべてを見るためにループでメソッドを呼び出さなければなりません。でも、そんなの気にしない。オフライン最適化でExpert Advisorをループで動かしていますが、実は、このような高速更新の表示が必要なのです。ただ、今はまだプロジェクトが 完成していないので、発表できる状態にはありません。


では、見てみましょう。そこにあるのはこれだけ!?

まあ...ビジュアライザーにしか書けないなら、こういうゲームは一人でやってください。どんなグラフィックでも、ポジションの開閉 マークでもレンダリングが遅くなるという話を聞いたことがないですか?いいえ。

邪魔にならないようにする...文字ごとに別々のラベルを作る...また、別のリソースを作る...。

 
Nikolai Semko:
誤解を招きそうなので私の鼻をこじ開けたいんでしょう? やっぱり、そういうことをしたいんでしょうね。やっぱり、こういうのやりたいんだね



比較試験の準備の仕方がわからない。

あなたの投稿から理解できたのは、「妄想」「笑」「テストの準備の仕方がわからない」という言葉だけでした。本当に、この話題とどう関係するのか理解できない...。あとは、「まったく」という言葉から理解できない!このスレッドを作ったとき、私はここで建設的な批判を 見たかったのです、理解できない主張の数々を見たかったのではありませんだから、わざわざ自分の言葉を説明する。そうでなければ、ここで無意味なことを書くな!」と。

 
Alexey Viktorov:

まあ...ビジュアライザーにしか書けないなら、こういうゲームは一人でやってください。どんなグラフィックも、たとえ位置の開閉 マークであっても、ビジュアライザーの速度を低下させるということを聞いたことがないのでしょうか?いいえ。

邪魔にならないようにする...文字ごとに別々のラベルを作る...また、別のリソースを作る...。

急ぎお知らせします、アレクセイ。もちろん、あなたもニコライと同じように空想しがちですが......。でも、実際は想像と違うんですよね。単純に、課題によって必要なソリューションが異なるということです。あなたとニコライは、何か本質的な コメントをすることができますか!

 
Mihail Matkovskij:

あなたの投稿から理解できたのは、「妄想」「笑」「テストの準備の仕方がわからない」という言葉だけでした。本当に、この話題とどう関係するのか理解できない...。あとは、「まったく」という言葉から理解できない!このスレッドを作ったとき、私はここで建設的な批判を 見たかったのです、理解できない主張の数々を見たかったのではありませんだから、わざわざ自分の言葉を説明する。そうでなければ、ここに無意味なことを書くな!」と。

忍耐だ、友よ、忍耐だ。
私はあなたほど時間がないんです。私は今最終学期で、3つのグループプロジェクトを 並行して行っています。というわけで、衝動的に来てしまいました。
でもね、私が説得してあげるから、そんなに力まないでね。 そうしないと、私の努力は無駄になるわよ。
もちろん、あなたの心があなたの感情を鎮めることができれば別ですが。
 
Nikolai Semko:
我慢だ、我慢。
私はあなたほど時間がないんです。私は今最終学期で、3つのグループプロジェクトを 並行して行っています。だから、衝動的に来てしまった。
でも、わかったよ、君の妄想を説得してあげるから、落ち着いて、そんなに頑張らないで。 でないと、僕の努力が無駄になっちゃうよ。

どうぞ。コードは複雑なものなので、明確に立証された 主張が必要なのです!まずはコードだけをきちんと 理解しましょう。

 

理解できない。最初の画像は、キャンバスがあり、そこに文字が書かれています。

その後の画像には、グラフィックに同様のテキストはありません。

つまり、当時は何が比較されていたのか?

 
Mihail Matkovskij:

どうぞ。でも、まずコードをきちんと 理解すること。コードは複雑なものだから、明確な主張が 必要なんだ!

あなたのコードを "正しく "理解することはできないでしょう。だって、もう調べたんだもん。短い評決 - 心からの災い。
今後数ヶ月の間に書く予定の私のコードを理解してもらう方が良い。
理由: