首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > QT开发 >

qml 内存泄露有关问题

2012-10-14 
qml 内存泄露问题qml和c++交互 用的modelist 会造成内存泄露。大家如何处理的?[解决办法]是的,每次都会增长

qml 内存泄露问题
qml和c++交互 用的modelist 会造成内存泄露。大家如何处理的?

[解决办法]
是的,每次都会增长一点~别的组件也会这样吗
[解决办法]
数据量很大吗?不大的话不用太关心这种问题。

C程序员有强迫症,我写代码的时候总是想着执行效率,其实花时间优化对现在的CPU来说快那么一点点已无意义。

漏个几M内存没啥,进程结束时会释放的。




[解决办法]
不好意思,我以为是非常驻程序呢。

你说的是ListModel吧?

如果ListModel不是为了显示的话,我会在javascript空间里var一个数组什么的,用c++填入数据。

如果用于显示的话就弃用ListModel,用js里的数据动态生成显示。反正ListModel也不是很好用。

对于硬件不富裕并且是工业级应用的话我更倾向于纯C++,心里托底,qml还不是很成熟,小bug我就发现不少。类似弹出提示框的组件都有可能会要你进程的命,时间充足的话你就试试看吧。

如果交互不复杂的话推荐你用QWidget里的paintEvent自已画吧,美工做好界面,用drawPixmap和drawText就行的。响应mousePressEvent等等即可。活有点糙,但稳当。

[解决办法]
你是说用到ListView上吗?

js数组不能直接用,我是用js函数动态更新ListModel。ListModel有clear()接口的,只是从没注意过clear后内存是否泄露的问题。

qml和js都是解释性的语言,想要它们管理好内存不现实的。js的内存回收记得好象是类似于.net ,就是说无法控制系统真的实时释放那一部分内存,那等系统觉得该去施放内存了才会真的释放掉。qml类似于css而且和js同一空间,我想和js的回收机制会有千丝万缕的联系。

铁心要用qml的话你暴力测试一下,看看能否泄露到程序崩溃,我猜到一定程度后会有回收机制出来干预的。对于精确释放qml占用的内存我持99%纯度的悲观态度。



[解决办法]
js数组不能直接用的。我是用js函数动态更新ListModel.

js和qml都是解释性的语言,内存回收类似于.net ,我对精确释放占用内存持决对悲观态度。

不过你可以暴力测试一下,看看能否泄露到程序崩溃,我想到一定程序会有回收机制跳出来干预的。

还有个变通的方式,就是你在ListModel预生成一定数据条数,要更新的话就依次付值,不要clear后再append.数据太多就做一下分页。没有动态分配内存也就没有泄露了吧,不知你具体应用场景,仅供参考。


[解决办法]
不过以我的qml经验真的很担心你用qml做工业级应用,现在回头成本算低的。

就算不回头也要和你上司通个气,打个预防针,想好退路哦。
[解决办法]
你的情况看起来有点复杂啊,c++端也有界面?不是纯qml界面?你的表述我也没完全理解。

到一定极限后将停止增加,是否意味着有回收机制在起作用?暴力测试了没?

C++端的内存回收是完全可信任的,只要你delete掉。
你试下这句,先new几十个,看下内存再delete掉,看下是否是操作系统内存用量显示有问题。
QPixmap* mBg=new QPixmap("res\\pic\\bg.png");

依你的情况还是先做完项目吧再扣细节吧,也许验收测试时一切OK也说不定

热点排行