全局异常处理程序未在Application_Exit时注销是否存在弊端?
全局异常处理程序未在Application_Exit时注销是否存在弊端?
嘿,这个问题问得挺务实的!我来给你唠明白这事儿~
绝大多数情况下,完全没有必要纠结没注销事件的问题,甚至可以说这步操作纯粹是多此一举。
为啥这么说呢?因为WPF里的Application对象是和整个应用进程绑定的——当Application_Exit触发时,整个应用已经进入了最终的收尾阶段,马上就要彻底退出了。这时候操作系统会直接回收进程占用的所有内存资源,不管你有没有注销这些异常处理事件的处理器,相关的引用都会被一次性清理干净,根本不会出现内存泄漏的风险。
当然,也得提一嘴极端特例:除非你在某些非常规场景下手动重启Application实例(这在普通WPF业务应用里几乎没人这么干),没注销的事件可能会导致旧的处理器还挂着,但这种情况实在太罕见了,正常开发完全不用考虑。
顺便对比下其他场景:要是你给普通的业务对象注册事件,没注销确实可能导致内存泄漏(因为对象可能还在内存中存续),但Application是进程级的核心对象,进程没了,所有关联资源都会被系统清掉,完全不用担心残留问题。
总结下来:放心用你现在的写法就行,不用特意在Application_Exit里加注销事件的代码,纯粹是增加冗余。
备注:内容来源于stack exchange,提问作者jeb




