我的应用程序内存增加
Memory increasing in my app
我正在学习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()是多余的。
相关文章:
- 内存增加和字符串流?
- ActiveMQ使用者的内存使用量在onMessage调用后不断增加
- SQLite C/C++ 接口:将数据插入表时内存增加
- 为什么将鼠标悬停在静态 Win32 控件上会增加内存并删除我的 GUI?
- 标准::矢量增加峰值内存
- 打开文件*以增加内存空间
- 使用新线程池而无需重新启动的新线程池后,Jemalloc的内存大大增加
- 为什么内存访问时间远远超过CPU缓存大小时会增加
- C :当居民记忆缓慢增加时,是否存在内存泄漏
- 程序C++中的虚拟内存大小增加
- FFMPEG 内存增加
- 如何增加机器的内存和CPU消耗
- 为什么在保留向量中插入空结构会增加内存
- 为什么 q网页测试的内存一直在增加?
- Win32 C++中的DrawText会增加内存使用率
- 内存占用增加
- Qt qml 应用程序增加内存使用量
- 内联函数是如何增加内存缓存未命中的,以及与替代函数相比,它为什么不好
- 导致Seg故障的地图.如何增加内存
- 增加内存映射文件的大小