我有一个服务器应用程序(使用 QTcpServer )。VLD 内存泄漏检查显示没有内存泄漏。但是当我从客户端向服务器发送命令时,任务管理器会显示内存增量。所以,服务器将耗尽内存。如何找到导致此类问题的代码部分?谢谢
问问题
326 次
2 回答
2
在接受客户的同时做一些“工作”显然你的内存使用量会增加。重要的是,当您完成“工作”时,您释放分配的对象。如果这些是 QObject 派生的对象,Qt 将在程序退出时跟踪并删除它们,因此确实不会显示内存泄漏,但如果您在服务器启动并运行时不删除它们,它们就会留在那儿。
您可以做一些事情来减少内存使用,例如不要在堆上创建对象,但在堆栈上(这些对象会自动消失)尝试使用尽可能少的内存分配,立即释放分配的内存不需要它之类的...
也许通过共享一些代码(如果它不是非常庞大)将帮助我们确定一些我们可以改进的关于内存使用的点。
于 2013-04-16T06:53:21.507 回答
1
填写这些问题,我想我可以帮助您:
- 客户端连接时内存增加?是/否
- 客户端断开连接时内存减少?是/否
- 3个客户端连接/断开连接后,您处于空闲状态,内存增加了吗?
- 连接 1 个客户端,发送命令,然后断开连接。内存增加了吗?
如果最后一个是 YES,请尝试隔离使内存增加的命令。
如果所有命令都在增加内存使用量,那么处理命令调度的代码就会泄漏。
如果只有 1 个命令泄漏,则该命令正在泄漏。
一般的问题:
- 您是否为您分配的每个 Qt 对象指定了一个父对象
new
,并且您不使用它来释放它delete
?如果没有,那就是你的泄漏。 - 你使用 QList 还是 QHashMap ?如果是,请检查您是否在需要时清理/整理它们
最后,您可以尝试在您分配的非 QT 对象上使用HP 垃圾收集器。
于 2013-04-16T10:42:26.210 回答