QCustomplot描画パフォーマンスの向上

QCustomPlotは、適応サンプリングやテキストオブジェクトキャッシングなどのさまざまな手法を使用して、再描画に必要な時間を短縮します。ただし、特定の機能(複雑な半透明の塗りつぶしや太い線など)でも、速度が大幅に低下する可能性があります。アプリケーションでこれに気付いた場合は、繰り返し印刷のパフォーマンスを向上させるためのヒントをいくつか紹介します。

これまでのところ、ほとんどの時間は、特に高密度のグラフやその他の描画テーブルを描画するときに、関数の描画に費やされてきました。最高のパフォーマンスを得るには、次の点を考慮してください。

  1. 特に、グラフィック、太い線、および半透明の色の間/間に複雑な塗りつぶしを使用する場合:QCustomPlot :: setOpenGlを介してQCustomPlotのOpenGLハードウェアアクセラレートレンダリングを有効にします。OpenGLアクセラレーションを適切に有効にする方法の詳細については、こちらのドキュメントをご覧ください。OpenGLアクセラレーションは、QCustomPlotでサポートされるすべてのQtバージョンで使用でき、対応するバックエンドがそれぞれ選択されます。5.0より前のバージョンのQtの場合、OpenGLアクセラレーションに対するQCustomPlot独自の代替手段は、「-graphicssystem opengl」をコマンドラインパラメータとして提供するか、QApplicationオブジェクトを作成する前に呼び出すことです。これにより、アプリケーション全体のOpenGLアクセラレーションを実現できます。
    QApplication :: setGraphicsSystem( "opengl")
    OpenGLアクセラレーションでは、最大フレームレートがディスプレイの垂直同期周波数によって制限される場合があることに注意してください(グラフィックカードドライバーの構成でVSyncを無効にできます)。したがって、単純な描画の場合(潜在的なフレームレートは60フレーム/秒よりもはるかに高い)、VSync周波数に制限されないため、OpenGLアクセラレーションはデフォルトのソフトウェアレンダラーよりも数値的に低い場合があります。
  2. ペン幅が1より大きい線は避けてください。これは、特にデフォルトのソフトウェアレンダラーに関連し、OpenGLアクセラレーションには関連しません。
  3. 複雑な塗りつぶしは避けてください。たとえば、数千のポイントを持つグラフィック間のチャネルを塗りつぶします。これは、特にデフォルトのソフトウェアレンダラーに関連し、OpenGLアクセラレーションには関連しません。
  4. 複雑ではないオブジェクト(アイテムなど)が変更されたために、図に比較的静的で複雑な図がある場合、通常は完全なQCustomPlot :: replotを呼び出す必要があります。定期的に変更されるオブジェクトを独自のレイヤーに配置することを検討してくださいそして、モード(QCPLayer :: setMode)をQCPLayer :: lmBufferedに設定します。これにより、QCustomPlotはこのレイヤーに専用の描画バッファーを割り当てることができ、潜在的に複雑で遅いグラフを含む他のレイヤーに関係なく、QCPLayer :: replotを使用して個別に再描画できます。詳細については、対応するメソッドのドキュメントを参照してください。
  5. Qt4のみ:Qt 4.8以降を使用してください。Qt 4.7と比較して、パフォーマンスが2倍または3倍向上しました。ただし、QPainterは壊れており、散布図などのピクセル精度の要素の描画はQt 4.7ほど良くありません。したがって、Qt 4.8に切り替えると、パフォーマンスとグラフィック品質の妥協点になります。QCustomPlotは、この種の最も深刻な障害を内部で解決しようとします。
  6. 範囲のドラッグ中の応答速度を改善するには、QCustomPlot :: setNoAntialiasingOnDragをtrueに設定することを検討してください。デフォルトのソフトウェアレンダラーを使用する場合にのみ意味があります。(OpenGLアンチエイリアスは、オンザフライで切り替えることはできません。これは、サンプルバッファーの高価な再割り当てを必要とします。)
  7. Qt4のみ:X11(GNU / Linux)では、遅いネイティブグラフィックスシステムの使用を避け、ラスターQApplication :: setGraphicsSystemを使用します。コマンドライン引数として「-graphicssystemラスター」を指定するか、QApplicationオブジェクトを作成する前に呼び出します("ラスター")。
  8. 特に塗りつぶしでは、どのような種類のアルファ(透明)カラーも使用しないでください。
  9. 特にグラフィックス行では、アンチエイリアスのいかなる形式も避けてください(QCustomPlot :: setNotAntialiasedElementsを参照)。デフォルトのソフトウェアレンダラーを使用する場合にのみ意味があります。
  10. たとえばQCPGraph :: setDataを使用して、完全なデータセットを繰り返し設定することは避けてください。実行中の測定などで、ほとんどのデータポイントが同じである場合は、代わりにQCPGraph :: addDataを使用します。QCPGraph :: dataを介して既存のデータにアクセスして操作できます。
  11. 最後のオプションとして、特定の瞬間に可視キー範囲内のデータポイントの数を減らすようにしてください。たとえば、最大キー範囲スパンを制限します(QCPAxis :: rangeChanged信号を参照)。QCustomPlotは、数百万の画面外のポイントを非常に効果的に最適化できます。

おすすめ

転載: blog.csdn.net/feiyangqingyun/article/details/108779361
おすすめ