Qt Qml动态创建的对象销毁后内存释放不完全

踏雪auuu CSDN会员 踏雪auuu 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

根据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是否会预留内存?怎样才能完全释放这些内存?

...全文
评论 1
收藏 已收藏
分享
返回顶部
踏雪auuu CSDN会员
Qt 21,503 成员 26,693 内容