专栏名称: DotNet
「DotNet」专注.NET和.NET Core技术传播,包括:C#、.NET、.NET Core跨平台技术、工具资源和相关动态。
目录
相关文章推荐
格上财富  ·  日本再次收买世界 ·  3 天前  
格上财富  ·  2025年,十大预测 ·  6 天前  
格上财富  ·  GDP大调整,谁在狂飙? ·  4 天前  
格上财富  ·  宇宙历史的新三维图谱 ·  4 天前  
中金固定收益研究  ·  【中金·REITs】公募REITs周报(12 ... ·  4 天前  
51好读  ›  专栏  ›  DotNet

使用 Visual Studio 分析 .NET Dump

DotNet  · 公众号  ·  · 2024-06-06 09:10

正文

前言

内存泄漏和高CPU使用率是在日常开发中经常遇到的问题,它们可能会导致应用程序性能下降甚至崩溃。

我们来讲讲如何使用Visual Studio 2022分析.NET Dump,快速找到程序内存泄漏问题。

什么是Dump文件?

Dump文件又叫内存转储文件或者叫内存快照文件。

用于存储程序运行时的状态信息的文件,这些文件通常包含了程序运行时的内存内容、线程信息、堆栈调用信息、异常信息等数据。Dump文件可以在程序崩溃、失去响应、资源消耗过高或者性能不理想等情况下生成,以帮助开发人员进行故障排查和调试。

编写一段内存泄漏的代码

下面我们编写一段死循环代码用于演示内存泄漏的情况:

internal class Program  
    {  
        static Liststring
>> memoryLeakList = new Liststring>>();  
  
        static void Main(string[] args)  
        {  
            //编写一段死循环代码用于演示内存泄漏的情况  
            //每次迭代都会创建一个新的List对象并将其添加到一个静态的List>集合中,但却没有释放这些对象,从而导致内存泄漏  
            while (true)  
            {  
                var newList = new List<string>();  
                for (int i = 0; i 1000; i++)  
                {  
                    var currentValue = i + " - " + Guid.NewGuid().ToString();  
                    Console.WriteLine(currentValue);  
                    newList.Add(currentValue);  
                }  
                memoryLeakList.Add(newList);  
            }  
        }  
    }  

查看程序运行情况并创建Dump文件

程序运行内存泄漏情况

创建转储文件(Dump文件)

使用Visual Studio分析Dump

打开Dump文件

使用打开TestConsoleApp (2).DMP文件:

运行诊断分析

诊断分析结果(定位内存泄漏位置)

因为我们要查看程序内存泄漏问题,所以我们针对性的查看线程调用堆栈结果即可。

课外拓展:因为线程调用堆栈是在内存上操作的,每个线程都有自己的调用堆栈,用于跟踪当前执行的方法和函数调用关系。当您在应用程序中启动一个线程时,系统会为该线程分配一定的内存来存储它的调用堆栈信息。

- EOF -

推荐阅读  点击标题可跳转
C# 表达式动态解析神器:DynamicExpresso
.NET 中间件新开源代码生成器 -ReZero
Gradio.Net:加速 .NET 的 Web 应用开发

看完本文有收获?请转发分享给更多人

推荐关注「DotNet」,提升.Net技能 

点赞和在看就是最大的支持❤️