加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 我的应用程序内存增加

发布时间:2020-12-16 07:10:03 所属栏目:百科 来源:网络整理
导读:我正在学习c,我需要一些关于如何在不使用指针时清理内存的建议. 我有一个黑莓10应用程序的背景,它在停止之前有3MB的内存限制,我的应用程序因为达到这个限制而被停止,我很难找到找出原因. 我已经将内存的增加范围缩小到一个函数 – 如果我不调用此函数,则内存
我正在学习c,我需要一些关于如何在不使用指针时清理内存的建议.

我有一个黑莓10应用程序的背景,它在停止之前有3MB的内存限制,我的应用程序因为达到这个限制而被停止,我很难找到找出原因.

我已经将内存的增加范围缩小到一个函数 – 如果我不调用此函数,则内存不会增加.

该函数使用QVariant,QVariantList,QVariantMap,QString,它们在创建类时在函数外部声明(即QVariantMap映射),然后我在函数中访问这些对象,我在每个函数上调用.clear(),我就是理解应该清理持有的内存,我也在函数中使用int,它也在它之外声明.

该函数非常大,并且正在调用其他函数,所以我在下面提供了一个代码片段,以防万一其他人显然是错误的.

bindings.clear();
bindings["name"] = name;
result.clear();
result = sqlda->execute(sqlQueryz,bindings);
if (!sqlda->hasError()) {

    if( !result.isNull() ) {
        list.clear();
        list = result.value<QVariantList>();
        recordsRead = list.size();

        for(int iii = 0; iii < recordsRead; iii++) {
            map.clear();
            map = list.at(iii).value<QVariantMap>();

任何帮助赞赏.

解决方法

在QList或QMap上调用.clear()清除列表但不释放列表中的对象,例如,如果你有:

QList<QObject *> list;
QObject *c = new QObject();
c->setObjectName("object_a");
list.append(c);

QObject *b = new QObject();
b->setObjectName("object_b");
list.append(b);

qDebug() << list.count();   //here you get 2
list.clear();
qDebug() << list.count();   //here you get 0;

qDebug() << a->objectName(); // Here you get "object_a"

这意味着在.clear()之后,你的对象仍然存在于记忆中

当你想真正摆脱列表中的所有对象时你应该做的是:

while (list.count() > 0)
    delete list.takeFirst();

这里list.clear()是多余的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读