工具:vs2019
系统:win10
语言:C++
github 调试 demo: dangwei-90/ProcessOptimize (github.com)
本文主要通过 VS 自带的诊断工具,对程序进行 memory 内存调优。
Begin
1. 编译测试 demo
读者可以通过 dangwei-90/ProcessOptimize (github.com) 下载,也可以自己编写测试 demo. 通过一个 while 循环来造成内存泄漏。
void CProcessOptimizeDlg::TestMemoryLeak()
{
while (!is_stop_) {
int* arr = new int[200];
std::cout << arr << std::endl;
Sleep(100);
}
}
void CProcessOptimizeDlg::OnBnClickedMemoryTest()
{
is_stop_ = false;
std::thread memory_thread(&CProcessOptimizeDlg::TestMemoryLeak, this);
memory_thread.detach();
}
2. 通过 VS 诊断工具
先启动 debug 调试,然后按 CTRL+ALT+F2 ,开启诊断工具,如下图所示:
如果提示“已禁用使用快照分析....”,点启用即可。
3. 通过工具开始分析
程序运行一分钟后,点击 截取快照 。此时,可以通过工具,分析这一分钟内,内存增长的函数占比,然后分析内存泄漏的地方,对之进行优化。
如下图所示:
点击 查看堆,如下图所示:
点击该行,查看详细情况:
此处显示,TestMemoryLeak() 方法,每隔110毫秒左右,会新增 800 字节的内存泄漏。点击该方法,如下图所示:
标蓝的行,表示诊断工具定位到的内存新增的地方。可以发现,while 循环内,每隔100毫秒,会 new 200个 int,但并没有 delete,导致内存泄漏。
4. 分析结束
大家可以通过该方法,对自己的程序,检测内存泄漏,进行内存调优。
over.