C# 如果winforms应用程序在未分离其事件处理程序的情况下关闭,SystemEvents.TimeChanged是否会泄漏?
一方面,说 。。。应用程序运行时,必须分离事件处理程序 已处置,否则将导致内存泄漏 另一方面,说: 不影响桌面应用程序C# 如果winforms应用程序在未分离其事件处理程序的情况下关闭,SystemEvents.TimeChanged是否会泄漏?,c#,.net,winforms,C#,.net,Winforms,一方面,说 。。。应用程序运行时,必须分离事件处理程序 已处置,否则将导致内存泄漏 另一方面,说: 不影响桌面应用程序 那么,事件的文档仅仅依赖于类的属性吗?或者它也会从Winforms应用程序中泄漏?底线:请参见-如果SystemEvents引用了表单,则该表单将不会获得GC'd。我不完全确定我是否理解您的问题或第二个摘录的相关性,但从事件的文档中可以看出,未能分离事件处理程序将导致内存泄漏。第二个链接表示HostProtectionAttribute不适用,而不是主机仅仅因为不适用而不受泄漏
那么,事件的文档仅仅依赖于类的属性吗?或者它也会从Winforms应用程序中泄漏?底线:请参见-如果
SystemEvents
引用了表单,则该表单将不会获得GC'd。我不完全确定我是否理解您的问题或第二个摘录的相关性,但从事件的文档中可以看出,未能分离事件处理程序将导致内存泄漏。第二个链接表示HostProtectionAttribute不适用,而不是主机仅仅因为不适用而不受泄漏的影响。我认为您应该正确地处理所有静态资源,因为它们是跨进程共享的,很可能会导致泄漏。这取决于您如何声明。如果您通过设计器添加了计时器,那么您就不必担心如何处理它。如果计时器是通过本地方法声明的(作用域不在类级别),则可能会出现问题。@sfdcfox谢谢。这是有道理的。你不能“泄露”SystemEvents,它是一个静态类。当您不取消订阅事件时,您肯定会泄漏表单对象,因为SystemEvents有一个对它的引用,所以它永远不会被垃圾收集。