当前位置: 代码迷 >> QT开发 >> QIODevice连续写入大量数据后产生“内存碎片”和“内存泄漏”有关问题
  详细解决方案

QIODevice连续写入大量数据后产生“内存碎片”和“内存泄漏”有关问题

热度:308   发布时间:2016-04-25 02:56:51.0
QIODevice连续写入大量数据后产生“内存碎片”和“内存泄漏”问题
本帖最后由 sumkee911 于 2015-05-03 21:45:07 编辑
我在编写一个服务器 利用QFile向硬盘写入服务器的log 和 利用QTcpSocket向大约两百个客户传送大量数据时,发现只要数据量一大,就开始产生内存碎片,经过我再三检查,发现是问题是出现在QFile和QTcpSocket在写入的时候。顺带一提,这两项功能都不是在主线程的。向请教各位同学有什么好的解决方法?万分感激!!

×××这个是写入log的


×××这个是写入socket的

------解决思路----------------------
QIODevice(QTcpSocket是QIODevice的子类)有内部缓冲区,如果不设置固定大小,会根据你要写入的数据,不断地重新分配内存。你可以自己设置一个门限,比如512K,每次写入前调用一下bytesToWrite(),看看剩余未写入数据有多少,如果接近你设置的门限,就等下一轮再调用write,这样可以避免内存碎片。
  相关解决方案