Большое количество ошибок страниц при рендеринге QWidgets - PullRequest
1 голос
/ 22 июня 2011

Я заметил большое количество ошибок страниц в моем приложении Qt. Я воспроизвел его, изменив размер закрепляющего виджета (с деревом виджетов из десятков виджетов внизу) на 2 секунды и проследил эту операцию с помощью AQTime. Я получаю 2000 страниц ошибок для этой операции. Почему это так?

Использование Qt 4.5.3 в Windows XP 32 бит

ОБНОВЛЕНИЕ : Это программные ошибки страниц
UPDATE2 : я создал пользовательский интерфейс в Qt Designer с 1 комбинированным списком с 2 элементами в нем. При предварительном просмотре я получаю 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

1 Ответ

1 голос
/ 23 июня 2011

Скорее всего, Qt выделил новое растровое изображение для хранения внешнего вида виджета, и система удовлетворила этот запрос, выделив процессу новые страницы. При первой записи на эти страницы возникает программная ошибка страницы, и фактические страницы отображаются в адресное пространство процесса. Этого потенциально можно избежать, кэшируя растровое изображение между вызовами перерисовки; однако при изменении размера необходимый размер растрового изображения изменится, и поэтому эта оптимизация больше не применяется; растровое изображение должно перераспределяться (вызывая мягкие сбои страниц) каждый раз, когда изменяются размеры.

Это действительно влияет на производительность?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...