Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 是否应删除对控件的事件赋值_.net_Winforms - Fatal编程技术网

.net 是否应删除对控件的事件赋值

.net 是否应删除对控件的事件赋值,.net,winforms,.net,Winforms,今天,我的老板似乎对.NET非常了解,他在和他谈话时说,我应该养成在设计器中删除事件分配给控件的习惯 我不记得他的确切解释了,但我记得事件的一些线索并没有包含在同一个线程中,它实际上并没有被垃圾收集完全清除?那是通过电话讨论的,我的耳机糟透了,听不清楚他说了什么 我只是希望有人能详细解释一下,或者给我指出一个方向,让我进一步了解它 谢谢 不管它值多少钱,我们使用的是.NET3.5,这有一个简单的规则。仅当事件源对象超出事件订阅者对象时,才需要显式取消订阅事件 Winforms应用程序中几乎从来没

今天,我的老板似乎对.NET非常了解,他在和他谈话时说,我应该养成在设计器中删除事件分配给控件的习惯

我不记得他的确切解释了,但我记得事件的一些线索并没有包含在同一个线程中,它实际上并没有被垃圾收集完全清除?那是通过电话讨论的,我的耳机糟透了,听不清楚他说了什么

我只是希望有人能详细解释一下,或者给我指出一个方向,让我进一步了解它

谢谢


不管它值多少钱,我们使用的是.NET3.5,这有一个简单的规则。仅当事件源对象超出事件订阅者对象时,才需要显式取消订阅事件

Winforms应用程序中几乎从来没有这种情况,因为表单对象及其包含的组件和控件同时死亡。表单通过控件集合引用控件。控件可以通过其事件的委托对象引用窗体,该委托对象可以使窗体对象保持活动状态。你老板的担心。不过,垃圾收集器在处理类似这样的循环引用时没有问题,它会在收集控件和事件委托对象的同时收集表单对象

在一些特定情况下,事件源对象确实比订阅者对象长。Application.Idle事件和SystemEvents事件的情况。关于这些事件值得注意的是,它们是静态的,因此在程序的生命周期中保持订阅对象引用,GC对此无能为力。如果关闭表单不会终止应用程序,则需要显式取消订阅这些事件


如果您对自己的代码有任何疑问,请使用内存分析器来验证您的假设。

有一个简单的规则。仅当事件源对象超出事件订阅者对象时,才需要显式取消订阅事件

Winforms应用程序中几乎从来没有这种情况,因为表单对象及其包含的组件和控件同时死亡。表单通过控件集合引用控件。控件可以通过其事件的委托对象引用窗体,该委托对象可以使窗体对象保持活动状态。你老板的担心。不过,垃圾收集器在处理类似这样的循环引用时没有问题,它会在收集控件和事件委托对象的同时收集表单对象

在一些特定情况下,事件源对象确实比订阅者对象长。Application.Idle事件和SystemEvents事件的情况。关于这些事件值得注意的是,它们是静态的,因此在程序的生命周期中保持订阅对象引用,GC对此无能为力。如果关闭表单不会终止应用程序,则需要显式取消订阅这些事件


如果您对自己的代码有任何疑问,请使用内存分析器来验证您的假设。

有一个简单的规则。仅当事件源对象超出事件订阅者对象时,才需要显式取消订阅事件

Winforms应用程序中几乎从来没有这种情况,因为表单对象及其包含的组件和控件同时死亡。表单通过控件集合引用控件。控件可以通过其事件的委托对象引用窗体,该委托对象可以使窗体对象保持活动状态。你老板的担心。不过,垃圾收集器在处理类似这样的循环引用时没有问题,它会在收集控件和事件委托对象的同时收集表单对象

在一些特定情况下,事件源对象确实比订阅者对象长。Application.Idle事件和SystemEvents事件的情况。关于这些事件值得注意的是,它们是静态的,因此在程序的生命周期中保持订阅对象引用,GC对此无能为力。如果关闭表单不会终止应用程序,则需要显式取消订阅这些事件


如果您对自己的代码有任何疑问,请使用内存分析器来验证您的假设。

有一个简单的规则。仅当事件源对象超出事件订阅者对象时,才需要显式取消订阅事件

Winforms应用程序中几乎从来没有这种情况,因为表单对象及其包含的组件和控件同时死亡。表单通过控件集合引用控件。控件可以通过其事件的委托对象引用窗体,该委托对象可以使窗体对象保持活动状态。你老板的担心。不过,垃圾收集器在处理类似这样的循环引用时没有问题,它会在收集控件和事件委托对象的同时收集表单对象

在一些特定情况下,事件源对象确实比订阅者对象长。Application.Idle事件和SystemEvents事件的情况。关于这些事件值得注意的是,它们是静态的,因此在程序的生命周期中保持订阅对象引用,GC对此无能为力。如果关闭表单不会终止应用程序,则需要显式取消订阅这些事件


如果您对自己的代码有任何疑问,请使用内存探查器来验证您的假设。

我的理解方式和使用的经验法则是,如果您在设计器中添加事件,您就可以了,不必删除它。但另一方面,如果您手动将其添加到后面的代码中,您需要自己删除它以防止内存泄漏。@MarkHall哦,是这样吗?他把这件事说成是导致内存泄漏的原因,我认为这听起来很像