关于QTableWidget的item所占内存的释放问题 .
来源:互联网 发布:为什么安装Linux虚拟机 编辑:程序博客网 时间:2024/05/16 11:16
现在有两个问题:
1 是什么时候释放?
2 如何释放
我们先看第一个问题,因为我现在的程序里面是定期刷新table,每次加载大量的数据,所以如果不清除之前的内存,就会使内存一直申请得不到释放最终导致内存泄露。当次显示完就释放显然不合适,因为item被delete掉后表中的内容就也不见了,因为指向的内存块区域的值给清除了。那么我们很容易想到,应该在下次刷新时清除上次申请的内存。
2 如何释放
之前在QT中文论坛上,搜索以前的记录看到有人问过,QTableWidget的clearContents是否可以清除QTableWidgetItem所申请的内存,有人回答可以。但是否可以,没测过,我对此也表怀疑。今天我实际测了一下,证明确实是可以释放的。下面贴下我的测试过程:
思路:启动一个简单GUI程序,此时开任务管理器看内存占用。然后点击一个按钮后,生成一些item,并添加到table中,此时再看内存占用。再点击另一个按钮,调用clearContentes,看增加的内存是否被释放掉。
代码:
void TestClearContents::on_pushButton_clicked()
{
ui.tableWidget->setRowCount(100);
ui.tableWidget->setColumnCount(500);
for (int i = 0;i < 100;i++)
{
for (int j = 0;j < 500;j++)
{
QTableWidgetItem *item = new QTableWidgetItem("aaa");
ui.tableWidget->setItem(i,j,item);
}
}
}
void TestClearContents::on_pushButton_2_clicked()
{
ui.tableWidget->clearContents();
}
结果:初始运行时 点击第一个按钮后 点击释放按钮后
14208 28248 14208
14208 28248 14212
14212 28248 14212
另外,释放内存时,如果用
int row = ui.tableWidget->rowCount();
int column = ui.tableWidget->columnCount();
for (int i = 0;i < row;i++)
{
for (int j = 0;j < column;j++)
{
QTableWidgetItem *item = ui.tableWidget->item(i,j);
if (item)
{
delete item;
}
}
}
这样的方法也可以把内存释放掉,但这个比较慢,是一段一段的释放内存,显然不适合实
- 关于QTableWidget的item所占内存的释放问题
- 关于QTableWidget的item所占内存的释放问题 .
- 关于QTableWidget的item所占内存的释放问题
- 关于QTableWidget的item所占内存的释放问题
- 关于QTableWidget的item所占内存的释放问题
- 如何利用Delphi释放所占的内存
- 关于内存释放的问题
- 关于根据指针测定一块内存所占空间大小的问题
- C/C++结构体所占内存的问题
- 关于释放内存的所费的时间.
- 如何释放Sqlserver所占得内存
- 关于PCHAR所占字节大小的问题
- 关于指针变量所占内存空间大小的问题
- 关于CvSeq指针的内存释放问题
- 关于 释放堆内存出错的 问题
- 关于面向对象的内存释放问题
- 关于linux 内存重复释放的问题
- 重建索引来释放索引所占的表空间
- 在C#中使用代理的方式触发事件
- 使用Kaptcha生成随机码
- 将数据分类显示成二维表的形式
- 配置Log4j(很详细)
- NFS 文件系统源代码剖析
- 关于QTableWidget的item所占内存的释放问题 .
- linux 设备驱动之8250串口驱动分析
- 3.5.7 vmalloc 实现原理------《深入Linux内核架构》笔记
- 今天完成的一个小程序
- mysql-mmm------实现mysql互为主从复制HA功能
- 捕获返回键 完全退出程序
- vim之 字符串编辑
- smarty的变量调机器
- jquery ui sortable 实现table,row的拖动。(Make Table Rows Sortable Using jQuery UI Sortable)