首页 > 系统相关 >使用Visual Studio诊断工具检查内存泄漏——订阅Events

使用Visual Studio诊断工具检查内存泄漏——订阅Events

时间:2024-07-14 23:19:07浏览次数:13  
标签:泄漏 订阅 MemoryLeakWithWifiManager Events Visual Studio 内存 wifiManager public

参考文章
8 Ways You can Cause Memory Leaks in .NET

订阅事件导致内存泄漏的原因

订阅事件后,该对象将保留对你的类的引用。除非你使用不捕获类成员的匿名方法。

防止Event内存泄漏的方法

  • 注销订阅事件。
  • 使用弱句柄(weak-handler)模式。
  • 如果可能,请使用匿名函数进行订阅,并且不要捕获任何类成员。

内存泄漏示例代码

public class WifiManager
{
    // 事件声明
    public event EventHandler<WifiEventArgs> WifiSignalChanged;
}

public class MemoryLeakWithWifiManager
{
    public MemoryLeakWithWifiManager(WifiManager wifiManager)
    {
        wifiManager.WifiSignalChanged += OnWifiChanged;
    }

    private void OnWifiChanged(object sender, WifiEventArgs e)
    {
        Console.WriteLine($"WiFi Changed: MemoryLeakWithWifiManager");
    }
}

wifiManager会引用MemoryLeakWithWifiManager的任何实例,并且垃圾回收器永远不会回收它们。

防止内存泄漏示例代码

public class MemoryLeakAvoidWithWifiManager
{
    public MemoryLeakAvoidWithWifiManager(WifiManager wifiManager)
    {
        //使用匿名函数进行订阅,并且不要捕获任何类成员
        wifiManager.WifiSignalChanged += (s, e) => Console.WriteLine($"WiFi Changed");
    }
}

使用Visual Studio诊断工具检查内存泄漏

可以在“见解”选项卡中的“事件处理程序泄露”一栏找到“MemoryLeakWithWifiManager”,说明该类发生了Event的内存泄漏。

切换MemoryLeakAvoidWithWifiManager进行测试时,“事件处理程序泄露”中不会找到该类,说明该类不会发生Event的内存泄漏。

标签:泄漏,订阅,MemoryLeakWithWifiManager,Events,Visual,Studio,内存,wifiManager,public
From: https://www.cnblogs.com/cnblogsName/p/18302186

相关文章

  • 【visualstudio配置安装(AI编码-通义灵码)】
    visualstudio配置安装(AI编码-通义灵码)前言一、安装1.[visualstudio官网]2.下载3.安装二、配置1.颜色主题2.中文插件3.AI编程(阿里云的通义灵码)插件4.其余插件前言『勤学似春起之苗,不见其增,而日有所长』本文档仅记录windows下visualstudio的安装配置的方法......
  • 解决Microsoft Visual C++ runtime package找不到问题
    使用了Dism++进行电脑清理,不小心选择了下面两个内容:尤其是第二个packagecache绝对不能清空,否则不知道哪个软件就不能运行了,报MicrosoftvisualC++runtime问题.然后再安装各个版本MicrosoftvisualC++redis仍会报同样的问题,死循环了.网上有各种解决方案,有......
  • EtherCAT总线耦合器:在欧姆龙Sysmac Studio软件里的配置步骤
    EtherCAT总线适配器XD7000作为网络接口,连接主控制器(如PLC)和其他EtherCAT设备,实现实时、高效的数据交换。通过EtherCAT总线耦合器,用户能够将所有设备连接在一个主网络上,并通过一个以太网端口进行控制。EtherCAT总线耦合器能够自动检测和确定不同的设备连接方式,从而实现快速、直接和......
  • 如何在 SwiftUI 中熟练使用 visualEffect 修饰符
    文章目录前言介绍visualEffect什么是视觉效果?visualEffect修饰符视觉效果完整的代码总结前言在WWDC23中,SwiftUI引入了一个名为visualEffect的新视图修饰符。此修饰符允许我们通过访问特定视图的布局信息来附加一组可动画化的视觉效果。下面我们将学习如何......
  • Visual Studio 2013俄语环境基石:‘mfc120rus.dll’解析与丢失修复全案
    mfc120rus.dll是一个动态链接库(DLL)文件,与MicrosoftFoundationClasses(MFC)相关。MFC是一个广泛使用的C++类库,用于简化Windows应用程序的开发。mfc120rus.dll特别地,是MFC库的俄语版本,用于支持俄语字符集和语言环境,它是MFC12.0版本的一部分,常用于VisualStudio2013中编译的......
  • 前端如何接收EventStream中的数据?
    本文目录1、fetch2、EventSourcefetchfetch是浏览器内置的方法无需下载fetch("http://127.0.0.1:6594/ws/getAccessToken",{method:"get",}).then((response)=>{constdecoder=newTextDecoder("utf-8");......
  • 2024 年 Visual Studio 实用插件集合
    前言  在软件开发领域,选择正确的工具可以极大地提升开发效率和质量。   VisualStudio作为微软推出的强大集成开发环境(IDE),通过安装合适的插件,可以进一步增强其功能,满足开发者多样化的需求。   以下是2024年最新最全的VisualStudio实用插件推荐,旨在帮助开发者优化......
  • InternStudio关卡(Python)
    任务一:wordcount函数请实现一个wordcount函数,统计英文字符串中每个单词出现的次数。返回一个字典,key为单词,value为对应单词出现的次数。在开发机中创建python_task1.py文件,输入以下内容,并且运行pythonpython_task1.py#请实现一个wordcount函数,统计英文字符串中每个单词出现......
  • 首次使用DevEcoStudio
    1、双击桌面快捷方式,进入首次运行的欢迎页面由于咱们之前电脑上没有安装过此软件,所以直接保持默认选项不导入配置,然后点击......
  • VisualStudio各版本_MSC_VER和_MSC_FULL_VER宏定义值列表
        这些值可以用于在C++中判断版本和C++特性支持情况。   大版本产品名VC++版本号_MSC_VER定义_MSC_FULL_VER定义2022VisualStudio2022version17.9.214.3919391939335212022VisualStudio2022version17.8.314.381938193833133202......