0

我有一个服务器应用程序(使用 QTcpServer )。VLD 内存泄漏检查显示没有内存泄漏。但是当我从客户端向服务器发送命令时,任务管理器会显示内存增量。所以,服务器将耗尽内存。如何找到导致此类问题的代码部分?谢谢

4

2 回答 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 回答