代码的哪一部分增加了内存使用

What part of code increases memory usage?

本文关键字:内存 增加 一部分 代码      更新时间:2023-10-16

我有一个服务器应用程序(与QTcpServer)。VLD内存泄漏检查显示没有内存泄漏。但是当我从客户端向服务器发送命令时,任务管理器显示内存增量。因此,服务器将耗尽内存。我怎样才能找到导致这种问题的代码部分?由于

在接受客户端时做一些"工作",显然您的内存使用量会增加。重要的是,当您完成"工作"时,您释放了您分配的对象。如果这些是QObject派生的对象,Qt将在程序退出时跟踪并删除它们,因此确实不会显示内存泄漏,但是如果您在服务器启动并运行时不删除它们,它们将留在那里。

你可以做一些事情来减少你的内存使用,比如不要在堆上创建对象,而是在堆栈上(这些对象会自动消失)尝试使用尽可能少的内存分配,在不需要的时候立即释放分配的内存,等等…

也许通过分享一些代码(如果它不是非常大)将帮助我们确定一些我们可以改进的关于内存使用的点

填写这些问题,我想我能帮助你:

    当客户端连接时内存增加?Y/N
  • 当客户端断开连接时内存减少?Y/N
  • 3个客户端连接/断开后,您处于空闲状态,内存增加了吗?
  • 连接1个客户端,发送命令,然后断开连接。记忆增加了吗?

如果最后一个是YES,尝试隔离使内存增加的命令。
如果所有命令都在增加内存使用,那么处理命令调度的代码正在泄漏。
如果只有一个命令是泄漏的,那么该命令是泄漏的。

一般性问题:

  • 你指定一个父每个Qt对象你分配使用new,你不与delete释放?如果没有,那是你的泄漏。
  • 使用QList还是QHashMap ?如果是,检查你是否在需要时清理/整理它们

最后,您可以尝试在您分配的非qt对象上使用HP垃圾收集器。