当前位置:  开发笔记 > 编程语言 > 正文

Winforms:删除由Visual Studio for Windows Forms创建的自动创建的Dispose()方法中的代码是否安全

如何解决《Winforms:删除由VisualStudioforWindowsForms创建的自动创建的Dispose()方法中的代码是否安全》经验,为你挑选了2个好方法。

不,删除此代码是不安全的.为了正确释放它们所持有的非托管资源,有几个组件依赖于这种模式.如果您删除此代码,您的应用程序可能会在95%的时间内正常工作.但是,5%的案例会显示为资源泄漏,可能是内存泄漏,非确定性错误......总的来说,很难追查问题.

处理可支配资源的最佳方法是在您不再使用它的瞬间处置.遵循这种做法将为您节省许多麻烦.删除此代码采用完全相反的方法.

这篇关于SO的帖子包含了更详细的解释:我什么时候应该在.NET中处理我的对象?



1> JaredPar..:

不,删除此代码是不安全的.为了正确释放它们所持有的非托管资源,有几个组件依赖于这种模式.如果您删除此代码,您的应用程序可能会在95%的时间内正常工作.但是,5%的案例会显示为资源泄漏,可能是内存泄漏,非确定性错误......总的来说,很难追查问题.

处理可支配资源的最佳方法是在您不再使用它的瞬间处置.遵循这种做法将为您节省许多麻烦.删除此代码采用完全相反的方法.

这篇关于SO的帖子包含了更详细的解释:我什么时候应该在.NET中处理我的对象?



2> Will Dean..:

如果你有可能在表单上使用类似System.Windows.Forms.Timer的东西,那么绝对不要删除它.并且始终存在这种可能性.

这个代码将在表单关闭时处理计时器,如果你不处理计时器,它将继续运行.我已经接管了几个代码,这些代码已经引入了这种类型的bug(在.NET 2.0之前,这种机制不能很好地工作),并且由于定时器在应该更新的表单之后运行很久而导致的间歇性性能问题已经关闭可能是一个真正的痛苦.

删除它没有任何实际好处 - 如果没有控件将自己添加到组件列表中,那么components.Dispose()将很容易运行.如果控件已经将自己添加到列表中那么那是因为它们应该被处理掉.

推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有