キャンバスとラベルの比較 - ページ 7 1234567891011121314...18 新しいコメント Nikolai Semko 2021.03.13 17:37 #61 Mihail Matkovskij:どこかで詳しく読める情報はないでしょうか?かなり明確になったとはいえ、やはり面白いテーマですねー。あとは、ビットマップ更新制御の変形を行い、テストするのみです。ラベルよりビットマップの方が速いなんてことになったら、驚きです。 BitMap は MQL5 ではなく C++ で埋められるので、ラベルが少ない場合は、kanvas よりも速度的に有利であることは認めます。しかし、BitMapのテキスト形成は両者ともwin関数で行われているため、canvasでも同じように形成されるとは考えにくい。Labelの場合、これらのオブジェクトはイベントプロパティ(マウスでドラッグ&ドロップできる)が充実しているので、結局は構築が重くなるのだと思います。 fxsaber 2021.03.13 17:42 #62 Canvasのスピードについて、疑問があります。 ビデオカードはCPUに内蔵されています。 このようなコードを実行する。 #include <fxsaber\Usage\Usage.mqh> // https://www.mql5.com/ru/code/33875 void OnInit() { USAGE::MinInterval = 100 * 1000; // 100 ms. EventSetMillisecondTimer((int)USAGE::MinInterval / 1000); } void OnTimer() { _USAGE // Расчет нагрузки. USAGE::GraphCreate(1200, 900, 200); // Вывели график нагрузки. } void OnDeinit( const int ) { USAGE::GraphDelete(); // Удалили график нагрузки. } 簡単に説明すると、100msごとにOnTimerがどれだけ実行されたかを測定します。また、OnTimerの内部で測定値のグラフを描画します。これが、その成果です。 15〜20%食ってしまう。どうやら、グラフィックカードが遅いようです。しかし、問題は別です。マウスで価格チャートをジャラジャラ動かし始めると(マウスの左ボタンを押しながら左右に動かすと)、負荷が2倍くらいになるんです。上のアニメーションでもはっきりと確認できます。この特殊性の理由は何でしょうか? もう一度言います。マウスで価格チャートを動かすと、OnTimerは2倍の時間がかかります。 Nikolai Semko 2021.03.13 17:55 #63 fxsaber:Canvasのスピードについて、疑問があります。ビデオカードはCPUに内蔵されています。このようなコードを実行する。簡単に説明すると、100msごとにOnTimerがどれだけ実行されたかを計測します。また、OnTimerの内部で測定値のグラフを描画します。これが、その成果です。15〜20%食ってしまう。どうやら、グラフィックカードが遅いようです。しかし、問題は別です。マウスで価格チャートをジャラジャラ動かし始めると(マウスの左ボタンを押しながら左右に動かすと)、負荷が2倍くらいになるんです。上のアニメーションでもはっきりと確認できます。この特殊性の理由は何でしょうか?もう一度言います。マウスで価格チャートを動かすと、OnTimerは2倍の時間を要します。 多くの場合、ライブラリには CHARTEVENT_CHART_CHANGE コントロールがあり、必要な場合(チャートサイズが変更された場合)にキャンバスサイズを変更しますが、それを見つけるには、恐ろしく遅い(今のところ)非同期関数 ChartGet... これを実行すると遅くなることが分かっています。 MQ では、CHARTEVENT_CHART_CHANGE イベントを分離し、たとえば、CHARTEVENT_CHART_SIZE_CHANGE を別に作成する方が理にかなっています。CHARTEVENT_CHART_CHANGE イベントには、新しいバーの出現、バーのスクロール、垂直方向の価格スケールの変更、ウィンドウのサイズ変更など、多くの要素があります。 Mihail Matkovskij 2021.03.13 18:02 #64 Nikolai Semko: BitMap は MQL5 ではなく C++ で記入されているため、少数の Labels を使用する場合、Kanvas よりも速度的に有利である可能性は十分にあります。しかし、BitMapのテキスト形成は両者ともwin関数で行われているため、canvasでも同じように形成されるとは考えにくい。Labelの場合、これらのオブジェクトもイベントドリブンな性質(マウスでドラッグ&ドロップできる)をまとっているので、結局は構造が重くなるのだと思います。 確かに、ラベルは高速化できる。チャートにいくつ入っているかにもよるが...。アップデートチェックを行い、その結果には確かに驚きました。目に優しい最小限のフレームレート、24fpsから取ったリミット。約41ミリ秒。カンヴァスに制限をかけて、あら不思議、驚きました。容赦ないラベルの更新に比べれば、まさに飛ぶ鳥を落とす勢いですしかし、Labelsの表示に同じ制限をかけると、Kanvasベースの表示よりもさらに高速になりました。しかし、先走ることなく、すべてのテスト 結果を後日紹介することにします。 Igor Makanu 2021.03.13 18:16 #65 fxsaber:マウスで価格チャートをジャラジャラ動かし始めると(マウスの左ボタンを押したまま左右に移動)、負荷が2倍になります。上のアニメーションでは、それが完全に見えています。この特殊性の理由は何でしょうか? Windowsのイベントモデル で、マウスを素早く動かしても、どのアプリケーションにフォーカスがあっても、CPUの負荷が増加し始めること SZY:Win10のタスクマネージャーで確認したところ...。Win10でイベントモデルが劇的に変化したとは思えません。むしろタスクマネージャの動作が変わっている可能性が高いです fxsaber 2021.03.13 18:24 #66 Nikolai Semko:多くの場合、ライブラリには CHARTEVENT_CHART_CHANGE コントロールがあり、必要な場合(チャートサイズが変更された場合)にキャンバスサイズを変更することができますが、それを見つけるには、ひどく遅い(今のところ)非同期の ChartGet 関数を実行する必要があります... このため、ブレーキがかかってしまいます。 MQ では、CHARTEVENT_CHART_CHANGE イベントを分離し、たとえば、CHARTEVENT_CHART_SIZE_CHANGE を別に作成する方が理にかなっています。CHARTEVENT_CHART_CHANGE イベントには、新しいバーが来る、バーがスクロールする、垂直方向の価格スケールが変わる、ウィンドウのサイズが変わるなど、様々なものがあります。 上記のコードには一切ありません。 fxsaber 2021.03.13 18:26 #67 Igor Makanu:Windowsのイベントモデル で、マウスを素早く動かすと、どのアプリケーションにフォーカスがあっても、CPUの負荷が増加し始める。SZY: Win10のタスクマネージャーで確認したところ...。Win7では、同じPCでマウスを素早く動かすと負荷が上がっていたのに、なぜかCPU負荷が上がっていない。Win10ではイベントモデルが根本的に変わっていないのだろうが、おそらくタスクマネージャーの動作が変わっているのだろう。ありがとうございます、知りませんでした。マウスでMQLのプログラムが半分くらい遅くなることに驚き。 ZS この結果になったのは私だけでしょうか? fxsaber: 15〜20%食ってしまう。どうやらビデオカードが遅いようです。 fxsaber 2021.03.13 18:32 #68 fxsaber:ありがとうございます、知りませんでした。マウスを使うと、MQLのプログラムが半分くらい遅くなることに驚きました。 それなら、ティックなどでラグがあるのは正当なことです。このようなイベントモデルによる HFTは、まるで地雷原のようです。 Nikolai Semko 2021.03.13 19:17 #69 fxsaber:上記のコードには一切ありません。 ああ、内部チャートだとは思わなかったよ。 プロファイリングから判断すると、チャートをスクロールするときのブレーキの原因は、このライン上にありますね。 アクティブスクロールを用いたプロファイリング。 スクロールを行わず(LKMを押さずに)マウスをアクティブに動かした場合のプロファイリング。 ZS: つまり、ブレーキの元はカンヴァスではなく、オブジェなんですね。 Renat Fatkhullin 2021.03.13 19:17 #70 Mihail Matkovskij:チャートでも確認できたはずです。しかし、テスターでやった方が簡単だと思いました。 これは欠陥のあるアプローチです。特にビジュアルテスターは遅延レンダリングモデルが異なるので、テストプロセスを完全に遅らせることができないように。 ですから、おっしゃるとおり、OBJ_BITMAP_LABELの描画よりもラベルのテキスト描画の方が時間がかかるのです。 そうとは言っていない。 明らかな誤りを指摘し、レンダリングシステムの仕組みを説明しました。 1234567891011121314...18 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
どこかで詳しく読める情報はないでしょうか?かなり明確になったとはいえ、やはり面白いテーマですねー。あとは、ビットマップ更新制御の変形を行い、テストするのみです。ラベルよりビットマップの方が速いなんてことになったら、驚きです。
Canvasのスピードについて、疑問があります。
ビデオカードはCPUに内蔵されています。
このようなコードを実行する。
簡単に説明すると、100msごとにOnTimerがどれだけ実行されたかを測定します。また、OnTimerの内部で測定値のグラフを描画します。これが、その成果です。
15〜20%食ってしまう。どうやら、グラフィックカードが遅いようです。しかし、問題は別です。マウスで価格チャートをジャラジャラ動かし始めると(マウスの左ボタンを押しながら左右に動かすと)、負荷が2倍くらいになるんです。上のアニメーションでもはっきりと確認できます。この特殊性の理由は何でしょうか?
もう一度言います。マウスで価格チャートを動かすと、OnTimerは2倍の時間がかかります。
Canvasのスピードについて、疑問があります。
ビデオカードはCPUに内蔵されています。
このようなコードを実行する。
簡単に説明すると、100msごとにOnTimerがどれだけ実行されたかを計測します。また、OnTimerの内部で測定値のグラフを描画します。これが、その成果です。
15〜20%食ってしまう。どうやら、グラフィックカードが遅いようです。しかし、問題は別です。マウスで価格チャートをジャラジャラ動かし始めると(マウスの左ボタンを押しながら左右に動かすと)、負荷が2倍くらいになるんです。上のアニメーションでもはっきりと確認できます。この特殊性の理由は何でしょうか?
もう一度言います。マウスで価格チャートを動かすと、OnTimerは2倍の時間を要します。
多くの場合、ライブラリには CHARTEVENT_CHART_CHANGE コントロールがあり、必要な場合(チャートサイズが変更された場合)にキャンバスサイズを変更しますが、それを見つけるには、恐ろしく遅い(今のところ)非同期関数 ChartGet...
これを実行すると遅くなることが分かっています。
MQ では、CHARTEVENT_CHART_CHANGE イベントを分離し、たとえば、CHARTEVENT_CHART_SIZE_CHANGE を別に作成する方が理にかなっています。CHARTEVENT_CHART_CHANGE イベントには、新しいバーの出現、バーのスクロール、垂直方向の価格スケールの変更、ウィンドウのサイズ変更など、多くの要素があります。
BitMap は MQL5 ではなく C++ で記入されているため、少数の Labels を使用する場合、Kanvas よりも速度的に有利である可能性は十分にあります。しかし、BitMapのテキスト形成は両者ともwin関数で行われているため、canvasでも同じように形成されるとは考えにくい。Labelの場合、これらのオブジェクトもイベントドリブンな性質(マウスでドラッグ&ドロップできる)をまとっているので、結局は構造が重くなるのだと思います。
確かに、ラベルは高速化できる。チャートにいくつ入っているかにもよるが...。アップデートチェックを行い、その結果には確かに驚きました。目に優しい最小限のフレームレート、24fpsから取ったリミット。約41ミリ秒。カンヴァスに制限をかけて、あら不思議、驚きました。容赦ないラベルの更新に比べれば、まさに飛ぶ鳥を落とす勢いですしかし、Labelsの表示に同じ制限をかけると、Kanvasベースの表示よりもさらに高速になりました。しかし、先走ることなく、すべてのテスト 結果を後日紹介することにします。
マウスで価格チャートをジャラジャラ動かし始めると(マウスの左ボタンを押したまま左右に移動)、負荷が2倍になります。上のアニメーションでは、それが完全に見えています。この特殊性の理由は何でしょうか?
Windowsのイベントモデル で、マウスを素早く動かしても、どのアプリケーションにフォーカスがあっても、CPUの負荷が増加し始めること
SZY:Win10のタスクマネージャーで確認したところ...。Win10でイベントモデルが劇的に変化したとは思えません。むしろタスクマネージャの動作が変わっている可能性が高いです
多くの場合、ライブラリには CHARTEVENT_CHART_CHANGE コントロールがあり、必要な場合(チャートサイズが変更された場合)にキャンバスサイズを変更することができますが、それを見つけるには、ひどく遅い(今のところ)非同期の ChartGet 関数を実行する必要があります...
このため、ブレーキがかかってしまいます。
MQ では、CHARTEVENT_CHART_CHANGE イベントを分離し、たとえば、CHARTEVENT_CHART_SIZE_CHANGE を別に作成する方が理にかなっています。CHARTEVENT_CHART_CHANGE イベントには、新しいバーが来る、バーがスクロールする、垂直方向の価格スケールが変わる、ウィンドウのサイズが変わるなど、様々なものがあります。
上記のコードには一切ありません。
Windowsのイベントモデル で、マウスを素早く動かすと、どのアプリケーションにフォーカスがあっても、CPUの負荷が増加し始める。
SZY: Win10のタスクマネージャーで確認したところ...。Win7では、同じPCでマウスを素早く動かすと負荷が上がっていたのに、なぜかCPU負荷が上がっていない。Win10ではイベントモデルが根本的に変わっていないのだろうが、おそらくタスクマネージャーの動作が変わっているのだろう。
ありがとうございます、知りませんでした。マウスでMQLのプログラムが半分くらい遅くなることに驚き。
ZS この結果になったのは私だけでしょうか?15〜20%食ってしまう。どうやらビデオカードが遅いようです。
ありがとうございます、知りませんでした。マウスを使うと、MQLのプログラムが半分くらい遅くなることに驚きました。
それなら、ティックなどでラグがあるのは正当なことです。このようなイベントモデルによる HFTは、まるで地雷原のようです。
上記のコードには一切ありません。
ああ、内部チャートだとは思わなかったよ。
プロファイリングから判断すると、チャートをスクロールするときのブレーキの原因は、このライン上にありますね。
アクティブスクロールを用いたプロファイリング。
スクロールを行わず(LKMを押さずに)マウスをアクティブに動かした場合のプロファイリング。
ZS: つまり、ブレーキの元はカンヴァスではなく、オブジェなんですね。
チャートでも確認できたはずです。しかし、テスターでやった方が簡単だと思いました。
これは欠陥のあるアプローチです。特にビジュアルテスターは遅延レンダリングモデルが異なるので、テストプロセスを完全に遅らせることができないように。
ですから、おっしゃるとおり、OBJ_BITMAP_LABELの描画よりもラベルのテキスト描画の方が時間がかかるのです。
そうとは言っていない。
明らかな誤りを指摘し、レンダリングシステムの仕組みを説明しました。