Qt Quick 内存使用

10

在一个中等规模的Qt项目中,我们注意到当屏幕上没有太多活动时,内存消耗非常高。我试图找到某种类型的内存泄漏问题,这导致我发现CREATE_QML_OBJECT宏,其中创建了qml实例对象。在从加载的qml文件中删除所有自定义UI元素并仅保留四个基本元素后,我得到了

Rectangle {
    Button {}
    CheckBox {}
    Slider {}
    TextField {}
}

这个东西大约占用 ~1-1.5 MB。

我看了一下 QtQuick 的演示项目,那里面也是同样的情况:

Gallery 演示。只是一些控件,在启动时就占用了 100MB 的内存。

Same game 演示。一个简单的游戏,在玩了 5 分钟之后就消耗了 256MB 的内存。

我真的很惊讶一个简单的 QtQuick QML 应用程序会消耗如此庞大的内存量。有人知道是什么原因导致了这些分配,是否有一种方法来管理它?

非常感谢任何帮助。


相关链接,但没有找到答案

QML big memory consumption?

Memory footprint of QML applications

Performance Considerations And Suggestions


奇怪的是,KDE开发者表示他们通过更高的QML使用量减少了内存消耗。 - QtRoS
称QML为“内存狂魔”已经算是夸它了。它比那更糟糕... - dtech
1个回答

3

所有这些都由JavaScript垃圾收集器管理。

尝试的几个方法是:

1)在加载一个项目后立即调用gc(),即在Component.onCompleted:中调用。

2)在Loader上加载项目。这样,当不使用它们时,它们不应该停留在内存中。

这些方法并不能保证减小内存占用,但可帮助一点。


谢谢您的建议,但似乎这就是Qt Quick的工作方式。显然,高内存占用并不是开发团队关注的问题。也许他们的想法是你应该在QML中实现UI的一些小部分。我不建议在大型项目中仅使用Qt Quick,纯小部件更加高效。 - vim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接