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种方法都一样。
请问哪位有解决方法?谢谢。
...全文
645 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)这种,这是建议;
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
提供的源码资源涵盖了小程序应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

16,216

社区成员

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

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