1

Qt アプリケーションで大量のページ フォールトが発生していることに気付きました。ドッキング ウィジェット (下に数十個のウィジェットのウィジェット ツリーがある) のサイズを 2 秒間変更して再現し、AQTime を使用してその操作をトレースしました。この操作で 2000 のページ フォールトが発生します。何故ですか?

Windows XP 32 ビットで Qt 4.5.3 を使用する

更新: それらはソフト ページ フォールト
です。これをプレビューすると、コンボボックスをクリックしてこれらの項目の 1 つを選択するたびに、200 ページ フォールトが発生します。

Parents
Code Type   Routine Name    Faults  Faults with Children    Hit Count
x86 qt_memfill_template<unsigned int,unsigned int>  2416    2416    5160
  x86   qt_memfill<unsigned int>    2416    2416    5160
    x86 qt_rectfill<unsigned int>   0   2416    5160
      x86   qt_rectfill_template<unsigned int>  0   2416    63
        x86 qt_rectfill_quint32 3   2419    63
          x86   fillRect_normalized 1   2420    63
            x86 QRasterPaintEngine::fillRect    3   2423    63
              x86   QRasterPaintEngine::fillRect    1   2424    63
                x86 QPainter::fillRect  1   2427    63
                  x86   fillRegion  0   2427    15
                    x86 QWidgetPrivate::paintBackground 2   2430    12
                      x86   QWidgetPrivate::drawWidget  0   2430    12
                        x86 QWidgetBackingStore::sync   2   2596    12
                          x86   QWidgetPrivate::syncBackingStore    4   2610    12
                            x86 QETWidget::translateConfigEvent 0   2479    6
                              x86   QtWndProc   0   2495    12
4

1 に答える 1

1

ほとんどの場合、Qt はウィジェットの外観を保持するために新しいビットマップを割り当て、システムは新しいページをプロセスに割り当てることでこの要求を満たしました。これらのページへの最初の書き込み時に、ソフト ページ フォールトが発生し、実際のページがプロセス アドレス空間にマップされます。これは、再描画呼び出しの間にビットマップをキャッシュすることで回避できる可能性があります。ただし、サイズを変更すると、必要なビットマップのサイズが変わるため、この最適化は適用されなくなります。次元が変更されるたびに、ビットマップを再割り当てする必要があります (ソフト ページ フォールトが発生します)。

しかし、これは実際にパフォーマンスに影響を与えていますか?

于 2011-06-22T20:09:41.127 に答える