0

QGraphicsView/Scene を中心に構築された Qt アプリケーションがあります。グラフィックのパフォーマンスは良好で、アニメーションは非常にスムーズで、シンプルな高解像度タイマーによると、フレームは 400 fps の速さで描画されます。ただし、タスク マネージャーによると、アプリケーションは常に 15% の CPU を使用しています。Visual Studio 2012 でパフォーマンス分析を実行したところ、ほとんどのサンプルが QApplication::notify 関数で取得されていることがわかりました。 Visual Studio からのプロファイル レポートのサンプリング

GPU への描画機能のオフロードが役立つことを期待して、ビューポートを QGLWidget でレンダリングするように設定しましたが、CPU 使用率にはまったく影響しませんでした。

これは正常ですか?CPU使用率を下げるためにできることはありますか?

プロセス エクスプローラーの [パフォーマンス] タブ プロセス エクスプローラーのパフォーマンス グラフ

4

1 に答える 1

2

400 FPS フレームレートです。これにより、コアの 1 つが 100% でロードされます。人々が通常フレームレートを制限するのには理由があります。高フレームレートは、グラフィックスを動かしている Qt イベント システムに負担をかけています。

フレーム レートを 60 FPS に制限すると、問題が解決します。

個々のグラフィックウィジェットを更新するイベントが発生しない限り、ビューを更新しません

シーン要素の変更ごとにシーンを更新しないでください。これがオーバーヘッドの原因である可能性があります。複数のシーン アイテムの変更を行うことができますが、シーンは固定レートでレンダリングされます。

また、あなたが言ったことに気づきましたgraphicswidget-私はそうだと思いますQGraphicsWidget-これも問題があるかもしれません. QObject派生クラスは少し重く、Qt イベント システムにもオーバーヘッドが伴います。これが、通常のクラスが派生されQGraphicsItemない理由QObjectです。QGraphicsItemグラフィックス ウィジェットを過度に使用すると、オーバーヘッドの原因になる可能性があるため、より軽いクラスといくつかのより軽いメカニズムを使用してシーンを駆動することを回避できるかどうかを確認してください。

于 2015-11-16T15:01:55.953 に答える