2011-06-22 4 views
1

Qtアプリケーションで大量のページフォルトが発生していることがわかりました。私はドッキングウィジェット(数十のウィジェットの下にあるウィジェットツリーを持つ)を2秒間リサイズして再現し、AQTimeを使ってその操作を追跡しました。この操作では2000ページのフォールトが発生します。何故ですか? UPDATEQWidgetsをレンダリングするときにページフォールトが多い

のWindows XP 32ビット上のQt 4.5.3を使用して

:彼らはソフトページフォールトをしている
アップデート2:私はそれで2つの項目で1つのコンボボックスでのQt DesignerでUIを作成しました。これをプレビューすると、コンボボックスをクリックするたびに200ページ違反が発生し、これらのアイテムの1つを選択します。

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 

答えて

1

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

これは実際にパフォーマンスに影響がありますか?

関連する問題