VS2019CPU/内存诊断功能

vs代码内存/CPU使用率诊断

在代码运行过程中,有时候会出现内存泄漏,内存/CPU占用过高等情况,这些情况的出现十分影响代码的运行效率和鲁棒性,所以有必要对代码进行诊断和优化处理。这边使用VS2019自带的代码诊断工具进行检测。
具体的操作方法是

  1. 先在要诊断的代码部分添加断点或者让程序完整运行起来(最好是能够循环)

  2. 运行代码(这边以绘制三角形为例子,屏幕是不断在刷新的)可以看到内存/CPU的运行状况
    在这里插入图片描述

  3. 这边以CPU使用率为例子,内存的占用查看也一样。选择一段或者是整段运行过程点击CPU使用率,再点击全部中断即可查看CPU占用情况
    在这里插入图片描述

  4. CPU占用情况根据饼图可以大致看出,然后再点击外部代码,从外部代码中选出关注的函数查看代码内部所占用的具体情况,根据需要对代码进行优化等操作。

内存泄漏诊断

在堆上分配内存(new或者malloc)但是没有释放(delete或者free)会造成内存泄漏,为了避免忘记释放导致的问题我们可以对代码进行内存诊断,方法和CPU诊断类似,主要的区别是我们需要使用内存使用率这边来查看具体的情况。
这边随便写一串代码,且保证其没有释放(内存泄漏)

//Test.h
#pragma once
#include<iostream>
using namespace std;
class Test
{
    
    
public:
	Test();
	Test(int a, int b);
	Test(const Test& t);
	~Test();
	void func();
	int m_a, m_b, m_c[100];//需要分配408个字节
};

#include "Test.h"

Test::Test()
{
    
    
	cout << "调用无参构造函数" << endl;
}

Test::Test(int a, int b)
{
    
    
	m_a = a;
	m_b = b;
	cout << "调用构造函数" << endl;
}

Test::Test(const Test& t)
{
    
    
	m_a = t.m_a;
	m_b = t.m_b;
	cout << "调用拷贝构造" << endl;
}

Test::~Test()
{
    
    
	cout << "调用析构函数" << endl;
}

void Test::func()
{
    
    
	
}
//主函数
#include"Test.h"
void func()
{
    
    

	
	//delete t;
}
void main()
{
    
    
	
	for (int i = 0; i < 100; i++)
	{
    
    
		
		Test* t0 = new Test(1,2);//内存泄漏 100*408
	}
	for (int i = 0; i < 1000; i++)
	{
    
    
		Test* t0 = new Test();
		Test* t1 = new Test();//t1内存泄漏1000*408
		delete t0;//t0释放了
	}
	system("pause");
}

点击内存使用率-》截取快照-》分配差异值-》出现左边1100个泄露的指针,以及泄露的内存1100*408=448800
在这里插入图片描述
双击1100进入分配的内存地址
在这里插入图片描述
双击地址直接跳入内存泄露的地方,还是相当快捷的。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44478077/article/details/125313157
今日推荐