首页 / 知识
使用lambda作为事件处理程序会导致内存泄漏吗?
2023-04-12 12:55:00

Can using lambdas as event handlers cause a memory leak?说我们有以下方法:
如果使用此方法的类被实例化并且多次调用
在调用 是的,将其保存到变量中并解钩。
是的,如果不这样做,则会泄漏内存,因为每次都会连接一个新的委托对象。您还会注意到这一点,因为每次调用此方法时,它都会将越来越多的行转储到控制台(不仅是增加的行数,而且对于MethodThatFiresAnEvent的一次调用,它将转储任意数目的项目,一次用于每个都连接了匿名方法)。 您不仅会泄漏内存,还会多次调用lambda。每次调用" PotentialMemoryLeaker"都会将lambda的另一个副本添加到事件列表中,并且在触发" AnEvent"时将调用每个副本。 好了,您可以扩展此处执行的操作,以使委托使用起来更安全(不存在内存泄漏) 您的示例仅编译为以编译器命名的内部类(带有字段firedCount和以编译器命名的方法)。每次对PotentialMemoryLeaker的调用都会创建一个闭包类的新实例,其中foo通过对单个方法的委托保留引用。 如果您不引用拥有PotentialMemoryLeaker的整个对象,则将全部垃圾回收。否则,可以通过编写以下命令将foo设置为null或清空foo的??事件处理程序列表:
当然,您需要访问MyObject类的私有成员。 是,就像普通事件处理程序可能导致泄漏一样。因为lambda实际上更改为:
因此,基本上,这只是这些年来我们在2.0中一直使用的简写方式。 |
最新内容
相关内容
python中获取路径的三种方法
python中获取路径的三种方法,工作,代码,情况,培训,下来,路径,文件,也就是,桌面,目录,python中获取路径总结下来分为三种情况:1、获取工作目录python中什么是类方法
python中什么是类方法,培训,方法,实例,静态,定义,参数,函数,内部,变量,属性,python中的类方法,指的是在类中定义的函数,函数在类的内部称为方法python怎么调用方法
python怎么调用方法,系统,培训,方法,参数,法名,定义,列表,实例,以上,函数,python调用的方法类的方法的定义1、定义一个类deffun_name(self,..python对象与方法的区别是什么
python对象与方法的区别是什么,地址,数据,培训,对象,函数,类型,字符串,方法,表示,身份,python使用对象模型来存储数据,也就是说构造任何类型的python调用方法必须实例化么
python调用方法必须实例化么,代码,培训,方法,静态,工厂,参数,程序,对象,实例,定义,python类中的实例方法和静态方法,在调用时,是有区别的。静态python有map方法吗
python有map方法吗,培训,位置,数据,函数,列表,序列,参数,元素,方法,使用方法,python中的map:map()会根据提供的函数对指定序列做映射。第一个python有哪些方法可以解压文件?
python有哪些方法可以解压文件?,工具,系统,工作,培训,文件,文件夹,方法,窗体,不同于,以下内容,在Python学习和日常使用中,很容易造成文件过大。python函数与方法的区别是什么
python函数与方法的区别是什么,培训,函数,方法,区别,对象,以上,方式,更多,内容,python中函数和方法的区别1、函数要手动传self,方法不用传selpython如何调用类中的方法
python如何调用类中的方法,培训,入口,名字,文件,方法,参数,路径,函数,文件夹,下面,python调用类中的方法:调用同一个类中的方法首先类中的方法python字符串切片的方法是什么
python字符串切片的方法是什么,培训,字符串,索引,切片,开头,方括号,时候,方法,冒号,首尾,获取Python字符串中的某字符可以使用索引:lang=pythopython子类怎么调用父类方法
python子类怎么调用父类方法,培训,代码,初始化,方法,函数,示例,时调,定义,对象,以上,python中类的初始化方法是__init__(),因此父类子类的初始python类自带方法吗
python类自带方法吗,培训,方法,里面,实例,也就是说,下面,对象,以上,之后,参数,python中的类,创建好之后,里面是没有方法的,也就是说,类并没有自带