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

 
Renat:
GDIメソッドは呼び出されません。

TextOutのことです。 システムではないのですか?

ラベルについては理解している、GDIとは一切関係ない

 
voix_kas:

説明ではなく、指標の値を表示するように設計されたラベルのすべて(半分)でテキストが変更されます。スクリプトを実行すると、このことが確認できます。

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

すみません、携帯から見ていて間違えてしまいました。

数時間以内に自分でテストを行い、ソースコードと詳細な結果を掲載する予定です。

 
sergeev:

TextOutのことです。 システムではないのですか?

ラベルについては理解している、GDIとは一切関係ない

GDIの時はタグの話じゃなかったっけ?

ラベルパラメータの変更は、オブジェクトデータがレンダリングされるか読み込まれるまで、そのデータを実際のオブジェクトに付加することなく、コマンドストリームを専用のキューに大量に詰め込むことに他なりません(オブジェクトはMQL5ではなく、チャートに属します)。つまり、モノの本当の意味での改造は先送りされるのです。何万個ものオブジェクトを扱っても、開発者が処理落ちしないように、あえてこのような最適化を施しています。

つまり、オブジェクトを変更する際に実際の実行を遅らせることで、スピード感を演出しているのです。さて、そして描画の負担はすべてアプリケーションのインターフェイス(グラフィック)スレッドに担わされます。また、レンダリング時には、最適化の方法と可視性制限のカットオフが機能し、1グラフあたり30万~50万個のオブジェクトで正常に動作させることができるようになりました。

しかし、ビットマップを扱う場合、MQL5では全ての作業が滞りなく一度に行われますが、その後のレンダリング時には瞬時に行われるのです。そして、ビットマップの「修正+レンダリング」の合計時間は、オブジェクトの数が一定であれば、より速くなる可能性が高いです。特に、呼び出しの間にビットマップが保存され、キャンバス全体を作り直すのではなく、必要なものだけを描き終えることができることを考慮すると、なおさらです。

オブジェクトとビットマップが異なるモードでどのように動作するかを示す詳細なテストを実行し、その結果を掲載します。

 

別スレッドに結果を投稿:チャート上の単一テキストラベルとビットマップのパフォーマンステスト

作者のビットマップ処理スクリプトには重大なバグがあり、実際には1枚のビットマップではなく2枚のビットマップを使用し、常に互いにコピーしあっていたため、パフォーマンスが低下していたのです。

 
Renat:

テスト結果を別スレッドに投稿:チャート上の単一テキストラベルとビットマップのパフォーマンステスト

作者はビットマップを扱う際のスクリプトに重大な欠陥があった。実際には1枚のビットマップではなく2枚のビットマップを使い、常に互いにコピーしあっていたため、パフォーマンスが低下してしまったのだ。

実際の出力を高速化する方法は、欠陥なんですね?:)

テンプレート・キャンバスやワーキング・キャンバスが導入された目的は、すでにここで説明したとおりです。

 

長生きしようよ。

MQL5のハンドブックには、datetime型https://www.mql5.com/ru/docs/basis/types/integer/datetime と書いてあります。

"1970年1月1日から3000年12月31日までの値の範囲。"

32535244799の最大値は、3001.01.01 07:59:59です。

Документация по MQL5: Основы языка / Типы данных / Целые типы / Тип datetime
Документация по MQL5: Основы языка / Типы данных / Целые типы / Тип datetime
  • www.mql5.com
Основы языка / Типы данных / Целые типы / Тип datetime - Документация по MQL5
 
このテストはパフォーマンスベースなので、追加操作で詰まることはないはずです。
 

プログラミングの純度を上げるために、一般の方にお聞きしたいことがあります。

グローバルに宣言されたフラグ(bool Flag)があるとする。特定のイベント/条件が発生したときに、特定の値に設定する必要があります。

最初のバリエーション。

if (некое условие) {
  Flag = false;
}

第二の選択肢

if (некое условие) {
  if (Flag) Flag = false;
}

どのオプションか。

1.性能的に速いのか?

2.強いて言えば、「よりプロフェッショナルに」ということでしょうか。

この部分のコードは、例えばtick毎 など、かなりの頻度で制御されることが想定されます。

 
voix_kas:

プログラミングの純度を上げるために、一般の方にお聞きしたいことがあります。

グローバルに宣言されたフラグ(bool Flag)があるとする。何らかのイベント/条件が発生したときに、特定の値に設定する必要があります。

もちろん、最初のバリエーションは高速です。命令数が減り、比較・分岐が1つ減りました。
 
Renat:
もちろん、最初の選択肢の方が速いです。命令数が減り、比較・分岐が1つ減りました。
ありがとうございます。
理由: