码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 使用Visual Studio分析.NET Dump


    思维导航

    • 前言
    • 什么是Dump文件?
    • 编写一段内存泄漏的代码
    • 查看程序运行情况并创建Dump文件
    • 使用Visual Studio分析Dump
    • 更多Visual Studio编程效率提升技巧
    • DotNetGuide技术社区交流群

    前言

    内存泄漏和高CPU使用率是在日常开发中经常遇到的问题,它们可能会导致应用程序性能下降甚至崩溃。今天我们来讲讲如何使用Visual Studio 2022分析.NET Dump,快速找到程序内存泄漏问题。

    什么是Dump文件?

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

    编写一段内存泄漏的代码

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

        internal class Program
        {
            static List> memoryLeakList = new List>();

            static void Main(string[] args)
            {
                //编写一段死循环代码用于演示内存泄漏的情况
                //每次迭代都会创建一个新的List对象并将其添加到一个静态的List>集合中,但却没有释放这些对象,从而导致内存泄漏
                while (true)
                {
                    var newList = new List();
                    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文件:

    运行诊断分析

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

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

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

    更多Visual Studio编程效率提升技巧

    • https://github.com/YSGStudyHards/DotNetGuide
    • Visual Studio编程效率提升技巧集(提高.NET编程效率)

    DotNetGuide技术社区交流群

    • DotNetGuide技术社区是一个面向.NET开发者的开源技术社区,旨在为开发者们提供全面的C#/.NET/.NET Core相关学习资料、技术分享和咨询、项目框架推荐、求职和招聘资讯、以及解决问题的平台。
    • 在DotNetGuide技术社区中,开发者们可以分享自己的技术文章、项目经验、学习心得、遇到的疑难技术问题以及解决方案,并且还有机会结识志同道合的开发者。
    • 我们致力于构建一个积极向上、和谐友善的.NET技术交流平台。无论您是初学者还是有丰富经验的开发者,我们都希望能为您提供更多的价值和成长机会。

    欢迎加入DotNetGuide技术社区微信交流群👪

    作者名称:追逐时光者

    作者简介:一个热爱编程、善于分享、喜欢学习、探索、尝试新事物和新技术的全栈软件工程师。

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。如果该篇文章对您有帮助的话,可以点一下右下角的【♥推荐♥】,希望能够持续的为大家带来好的技术文章,文中可能存在描述不正确的地方,欢迎指正或补充,不胜感激。

  • 相关阅读:
    ssm毕设项目学生社团管理系统jcjyw(java+VUE+Mybatis+Maven+Mysql+sprnig)
    IO流{文件和目录 File 字符如何储存在电脑上 字节输入流 字节输出流 read方法读的字节为什么返回int类型}(一)
    医院检验科LIS系统源码,oracle数据库、报告管理、质控管理
    54_Pandas将DataFrame、Series转换为字典 (to_dict)
    24点游戏解法
    MySQL——简单认识一下索引吧(index)
    Vue--》详解Vue组件生命周期的三个阶段
    mysql5.7linux安装完整版100%成功
    【Java 基础篇】Java网络编程实时数据流处理
    Window 脚本 - Powershell 使用
  • 原文地址:https://www.cnblogs.com/Can-daydayup/p/18232050
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号