Details
-
Suggestion
-
Resolution: Done
-
P3: Somewhat important
-
None
-
None
-
9fd34288efdbb5c77d002408dd83bccbd654292f
Description
Memory usage can be reduced in QDeclarativeEnginePrivate class by setting a smaller value for the increment in QPODVector used for capturedProperties.
When running Valgrind, the following can be seen in a QML application. The increment in QPODVector of CapturedProperty is set to the default size of 1024:
==3137== 9,112 bytes in 103 blocks are possibly lost in loss record 9,700 of 9,788
==3137== at 0x483535C: operator new[](unsigned int) (vg_replace_malloc.c:299)
==3137== by 0x49FC39B: QDeclarativeQtScriptExpression::updateGuards(QPODVector<QDeclarativeEnginePrivate::CapturedProperty, 1024> const&) (qdeclarativeexpression.cpp:551)
==3137== by 0x49FD427: QDeclarativeQtScriptExpression::scriptValue(QObject*, bool*) (qdeclarativeexpression.cpp:479)
==3137== by 0x49FD65B: QDeclarativeExpressionPrivate::scriptValue(QObject*, bool*) (qdeclarativeexpression.cpp:653)
==3137== by 0x49FE463: QDeclarativeBinding::update(QFlags<QDeclarativePropertyPrivate::WriteFlag>) (qdeclarativebinding.cpp:364)
==3137== by 0x49FDE47: QDeclarativeBinding::setEnabled(bool, QFlags<QDeclarativePropertyPrivate::WriteFlag>) (qdeclarativebinding.cpp:473)
==3137== by 0x4A06D4B: QDeclarativeComponentPrivate::complete(QDeclarativeEnginePrivate*, QDeclarativeComponentPrivate::ConstructionState*) (qdeclarativecomponent.cpp:948)
==3137== by 0x4A0753B: QDeclarativeComponentPrivate::completeCreate() (qdeclarativecomponent.cpp:1035)
==3137== by 0x4A0637B: QDeclarativeComponent::create(QDeclarativeContext*) (qdeclarativecomponent.cpp:768)
==3137== by 0x48C68F3: QDeclarativeView::continueExecute() (qdeclarativeview.cpp:547)
Currently the default value of 1024 is used for QPODVector in capturedProperties:
http://qt.gitorious.org/qt/qt/blobs/4.7-stable/src/declarative/qml/qdeclarativeengine_p.h#line161
QPODVector<CapturedProperty> capturedProperties;
A smaller value could be defined for capturedProperties to reduce memory usage:
QPODVector<CapturedProperty,20> capturedProperties;