NET程序内存泄漏处理技巧/调试内存泄漏教程
什么是Dump(dmp)文件?
Dump是计算机技术中的重要概念,用于将内存中的数据转储到外部存储设备中,以便在出现故障时进行排查和分析。Dump文件又叫内存转储文件或者叫内存快照文件。用于存储程序运行时的状态信息的文件,这些文件通常包含了程序运行时的内存内容、线程信息、堆栈调用信息、异常信息等数据。
通过分析Dump文件,工程师们可以了解系统中内存的使用情况,识别可能存在的问题,如内存泄漏、性能瓶颈等,并进行相应的优化措施。Dump文件对于系统性能调优具有重要意义,通过分析Dump文件中的数据,可以找出造成性能问题的根源,有效提升系统的响应速度和稳定性。
Dump的使用场景
首先,Dump可用于故障排查。当计算机出现意外崩溃、程序运行异常或操作系统错误时,工程师们可以通过分析Dump文件来定位问题。
其次,Dump对软件开发也具有重要意义。开发人员可以通过Dump文件来调试程序,在错误发生时捕获关键数据,有利于快速定位和修复Bug。
此外,Dump还在安全研究中起着重要的作用,可以帮助安全专家分析恶意软件的行为并寻找潜在的安全漏洞。
Dump文件在Net项目中的使用
官方处理教程:https://learn.microsoft.com/zh-cn/dotnet/core/diagnostics/debug-memory-leak
可以使用Visual Studio分析.NET Dump,快速查找程序内存泄漏问题!
1、创建实例:
namespace dockerDemo.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
///
/// 缓存列表
///
List<List
[HttpGet]
public string data()
{
//搞个死循环来模拟内存溢出
while (true)
{
var nelist = new List
for (int i = 0; i < 1000; i++)
{
var curvalue = i + "-" + Guid.NewGuid().ToString();
Console.WriteLine(curvalue);
nelist.Add(curvalue);
}
memoryList.Add(nelist);
}
return "helle word";
}
}
}
2、调试
3、查看内存使用情况
4、在任务管理器中找到正在调试的测试程序进程创建转储
5、在vs中打开刚刚创建的转储文件 打开后 运行诊断分析
6、点击分析
7、查看分析报告
因为线程调用堆栈是在内存上操作的,每个线程都有自己的调用堆栈,用于跟踪当前执行的方法和函数调用关系。当您在应用程序中启动一个线程时,系统会为该线程分配一定的内存来存储它的调用堆栈信息。因此我们只查看程序内存泄漏问题,所以我们针对性的查看线程调用堆栈结果即可。这样就对快速的定位内存泄漏位置