我注意到我的Qt应用程序中存在大量页面错误。我通过调整停靠小部件(下面有几十个小部件的小部件树)2秒钟来重现它,并使用AQTime跟踪该操作。我为此操作收到2000页错误。那是为什么?
在Windows XP 32位上使用Qt 4.5.3
更新:它们是软页面错误 UPDATE2 :我在Qt Designer中创建了一个带有1个组合框的ui,其中包含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
答案 0 :(得分:1)
最有可能的是,Qt分配了一个新的位图来保存小部件的外观,系统通过为进程分配新页面来满足此请求。在第一次写入这些页面时,发生软页面错误,并且实际页面被映射到进程地址空间。通过在重绘调用之间缓存位图可以避免这种情况;但是,在调整大小时,所需位图的大小会发生变化,因此这种优化不再适用;每次尺寸变化时,必须重新分配位图(导致软页面错误)。
这实际上会对性能产生影响吗?