内存消耗迅速增加,然后非常缓慢地下降;内存泄漏
本文关键字:内存 缓慢 地下 泄漏 非常 增加 然后 | 更新日期: 2023-09-27 18:36:52
我在运行程序时遇到此问题:
- 当我的程序之一正在运行时,内存消耗会迅速增加。
- 我使用性能监视器和虚拟泄漏检测,都说没有泄漏。
- 功能结束后(程序不退出),内存将缓慢下降到正常水平。
- 程序基本上是C#,WPF,C++;
因此,当内存消耗变得高时,我的程序驱动的硬件(电机)响应非常缓慢。
我很困惑。这是内存泄漏吗?
我知道可能很难确定问题出在哪里,但是有什么共同的逻辑应该如何看待这个问题吗?或者任何常用工具?就像检查汽车上的进气泄漏/系统倾斜通常从管子、质量空气流量传感器或 O2 传感器开始......
多谢!
有几件事你可以尝试 -尝试运行 Sysinternals 进程监视器工具(进程监视器 v3.2),并正确配置符号路径和源代码路径(假设您在 Windows 平台上运行)。日志很可能会告诉您导致泄漏的行号和来源。您需要知道如何使用进程监视器并浏览日志。
否则,您也可以尝试使用以下 CRT API 来跟踪内存分配/释放,并吐出内存泄漏转储以供进一步调查。以下代码仅在调试模式下工作。
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#ifdef _DEBUG
#ifndef DBG_NEW
#define DBG_NEW new ( _NORMAL_BLOCK , __FILE__ , __LINE__ )
#define new DBG_NEW
#endif
#endif // _DEBUG
_CrtMemState crtMemStateStart;
_CrtMemState crtMemStateFinish;
_CrtMemCheckpoint(&crtMemStateStart);
// Your suspisious code
_CrtMemCheckpoint(&crtMemStateFinish);
int nDifference(0);
_CrtMemState crtMemStateDifference;
nDifference = _CrtMemDifference(&crtMemStateDifference, &crtMemStateStart, &crtMemStateFinish);
if(nDifference > 0)
_CrtDumpMemoryLeaks();
有关详细信息,请参阅此链接:使用 CRT 库查找内存泄漏
请记住,始终内存泄漏可能有点难以找到,尤其是在涉及COM代码的情况下。但是拥有正确的知识和工具肯定会让生活更轻松一些。
Memory Profiler 对我有用:
内存性能分析器试用版下载
这是试用版,我喜欢它。