Qt Qml动态创建的对象销毁后内存释放不完全
根据Qt官方文档说的,可以在js中用createObject动态创建对象,并调用destroy()来销毁对象。
但我创建一堆对象,再把它们销毁后,内存并没有完全降低到创建前的状态(内存多了很多)。
比如下面这个Qml文件,它先创建50000个TextInput,6秒后销毁。
经多次测试,创建完内存是600~1200MB之间,销毁后内存是300~1000MB之间。
import QtQuick
import QtQuick.Controls
Window {
id: windows
width: 640
height: 480
visible: true
title: qsTr("Hello World")
Component {
id: cp_test
TextInput {}
}
Timer {
running: true
repeat: false
interval: 6000
property var entitys: []
Component.onCompleted: {
for(let i = 0; i < 50000; ++i) { //动态创建5万个Qml对象
var entity = cp_test.createObject(windows)
entity.x = i*0.01
entity.y = 200
entity.text = "hello,world"
entitys.push(entity)
}
}
onTriggered: { // 6秒后
for(let obj of entitys)
obj.destroy() //动态销毁Qml对象
entitys = []
}
}
}
创建完有的时候600MB,有的时候1200MB。
600MB是创建完,完全不操作。销毁后是300MB。
1200MB是创建完,连续点击TextInput后的内存。销毁后,是900~1000MB。
我实在不明白为什么会这样,我怀疑Qml是否会预留内存?怎样才能完全释放这些内存?
...全文
相关推荐
Qt6 QML Book/动态QML/创建和销毁对象示例源码
Qt6 QML Book/动态QML/创建和销毁对象 示例源码 CSDN审核可能较慢,如无法下载,可以过段时间再回来看下 仅供相关爱好者交流使用,请于下载24小时内删除
Qt核心机制、Qt元对象系统、Qt信号槽原理
个人吐血整理,从源码剖析Qt框架,绝对给力!
qt通过类名动态创建对象
qt通过类名动态创建对象
QML中动态创建组件(同步/异步)的方法
在QML中想要动态创建组件,一般有两种方法: 1、使用Loader。 2、使用JavaScript:Qt.createComponent() / Qt.createQmlObject()。
Dynamic_QML_JS:如何使用Javascript动态创建QML对象的示例
Dynamic_QML_JS:如何使用Javascript动态创建QML对象的示例


