QFiler反复使用后内存无限增大问题

巅峰 2017-06-30 11:10:12
QFile *file = new QFile();
file->setFileName(xmlfilename);
if(!file->open(QIODevice::WriteOnly)) return ;
//QTextStream out(&file);
//将文档保存到文件,4为子元素缩进字符数
//doc.save(out, 4); //QDomDocument doc;
//file.close();
file->close();
delete file;
file = NULL;

QFile file(xmlfilename);
if(!file.open(QIODevice::WriteOnly)) return ; //|QIODevice::Truncate
//QTextStream out(&file);
//将文档保存到文件,4为子元素缩进字符数
//doc.save(out, 4);
file.close();

我有一个项目将SQL SERVER数据库中记录导出至XML文件存储,每条记录一个文件,但测试发现导出记录达到成千上万时,软件保存XML时速度很慢已经放在线程中处理但还是卡住,软件内存不断增加直到占满终止,即便导出记录量不大但软件需要24小时运行,内存占用也在不断增大,调试发现问题出在QFile 上保存文件慢内存不释放,使用以上2种方法都一样。
请问哪位有解决方法?谢谢。
...全文
624 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
巅峰 2017-12-15
  • 打赏
  • 举报
回复
不是CFile问题,而是QT显示文件例表的控件增加文件后自动刷新,内存增大。
巅峰 2017-06-30
  • 打赏
  • 举报
回复
谢谢你的回复 你的意思是导出XML文件部分代码占用的内存: QDomDocument doc; //添加处理指令即XML说明 QDomProcessingInstruction instruction; instruction = doc.createProcessingInstruction("xml","version=\"1.0\" encoding=\"UTF-8\""); doc.appendChild(instruction); //添加在最后 //添加根元素 QDomElement root = doc.createElement("body"); doc.appendChild(root); QDomElement head = doc.createElement(QString("head")); QDomAttr sender = doc.createAttribute(QString("sender")); sender.setValue(areacode); //QString("320000") head.setAttributeNode(sender); QDomAttr businesstype = doc.createAttribute(QString("businesstype")); businesstype.setValue(QString("WA")); head.setAttributeNode(businesstype); QDomAttr businessitem = doc.createAttribute(QString("businessitem")); businessitem.setValue(QString("NNWA_AUTO")); head.setAttributeNode(businessitem); QDomAttr Total = doc.createAttribute(QString("Total")); Total.setValue(QString("1")); head.setAttributeNode(Total); QDomAttr Filegeneratedtime = doc.createAttribute(QString("Filegeneratedtime")); QString currenttime = QDateTime::currentDateTime().toString("yyyyMMddhhmmss"); Filegeneratedtime.setValue(currenttime); head.setAttributeNode(Filegeneratedtime); QDomAttr versionnum = doc.createAttribute(QString("versionnum")); versionnum.setValue(file_versionnum); head.setAttributeNode(versionnum); root.appendChild(head); 但是整段程序我如果只把导出XML文件QFile 的那几行注释掉程序就运行很快内存也不会增大。 程序设计时是先使用QFile file(name)的方式,因为有这个问题所以改用指针释放内存测试,问题也一样。 你说的方式我也可以单独把QFile file(name)功能部分拿出来,用个循环保存一些空文件测试下速度和内存增大看有没有问题。
Little柯南 2017-06-30
  • 打赏
  • 举报
回复
我想说的是: 第一、读取db的数据写入xml,首先是读到内存,写入后,你需要把原来读到内存的空间释放,这些放在内存的东西才是原因; 第二、你的QFile是用new方法使用的,虽然你delete,但毕竟你多次调用。你平时读Qt书籍,应该会看到,很多都是QFile file(name)这种,这是建议;

16,175

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧