博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
万恶之源-事件
阅读量:5249 次
发布时间:2019-06-14

本文共 853 字,大约阅读时间需要 2 分钟。

场景有2个类

class A     {
public EventHandler TestEventHandler; } class B {
public string Name { get; set; } public void Test(object o, EventArgs e) {
Console.WriteLine(Name+"say:我依然活着。。。"); //do somethings } } class Program {
static void Main(string[] args) {
A a = new A(); B b = new B(); b.Name = "__b"; a.TestEventHandler += b.Test;//TestEventHandler不仅仅存着Test方法的信息,还存着b的引用呢 b = null; GC.Collect(); a.TestEventHandler(null, null); Console.ReadKey(); } }

在a长期存活的,而b短命且不断新建、销毁的情况,就造成了内存的泄露。

这在复杂的多层的场景下,这样的bug是很难被发现的。。

万恶的事件啊。更可恶的是TestEventHandler不能直接置为null,非要-=。。。还必须是找到原引用的方法。fuck!

解决办法1:使用Dispose()模式。

    2:使用弱引用。

转载于:https://www.cnblogs.com/yczz/archive/2012/03/23/2413894.html

你可能感兴趣的文章
torch教程[1]用numpy实现三层全连接神经网络
查看>>
java实现哈弗曼树
查看>>
转:Web 测试的创作与调试技术
查看>>
python学习笔记3-列表
查看>>
程序的静态链接,动态链接和装载 (补充)
查看>>
关于本博客说明
查看>>
线程androidAndroid ConditionVariable的用法
查看>>
stap-prep 需要安装那些内核符号
查看>>
转载:ASP.NET Core 在 JSON 文件中配置依赖注入
查看>>
socket初识
查看>>
磁盘测试工具
查看>>
代码变量、函数命名神奇网站
查看>>
redis cli命令
查看>>
Problem B: 占点游戏
查看>>
python常用模块之sys, os, random
查看>>
HDU 2548 A strange lift
查看>>
Linux服务器在外地,如何用eclipse连接hdfs
查看>>
react双组件传值和传参
查看>>
[Kaggle] Sentiment Analysis on Movie Reviews
查看>>
价值观
查看>>