vb.net - 在vb.net中,如果我使用AddHandler,我是否必须使用RemoveHandler?

标签 vb.net memory-management

如果我在使用 AddHandler 之后总是需要调用 RemoveHandler,那么最好的位置在哪里?

我搜了几个类似的问题如下,但不太明白。

When and where to call the RemoveHandler in VB.NET?

AddHandler/RemoveHandler Not Disposing Correctly

我认为 C# 或 vb.net 中的垃圾收集会处理未使用的对象。另外,在vb.net设计器中,它会自动生成Dispose Sub。所以我根本没有注意以程序方式释放资源。我会遇到内存泄漏问题吗?请为我提供一些链接/文档以供我开始学习。

Protected Overrides Sub Dispose(ByVal disposing As Boolean)
    Try
        If disposing AndAlso components IsNot Nothing Then
            components.Dispose()
        End If
    Finally
        MyBase.Dispose(disposing)
    End Try
End Sub

非常感谢!

最佳答案

If I always need to call RemoveHandler after using AddHandler, where is the best place to do so

您不一定必须这样做。

如果您的源对象(具有事件的对象)的生命周期将超过您的订阅者,那么您通常只需要担心调用RemoveHandler。如果您在表单中工作,那么表单的处理将阻止源再引发事件,并且两个对象都将超出范围并(最终)被垃圾收集,因此您不会有任何问题。 p>

如果您从某个其他对象订阅长生命周期对象上的事件,而该对象将在长生命周期对象之前“消失”,则此问题会更严重。即使使用垃圾收集器,这也可能导致内存泄漏。在这种情况下,您需要在监听完事件后调用RemoveHandler。不过,对于何时发生这种情况没有单一的指导,因为这取决于相关事件和您的应用程序逻辑。

关于vb.net - 在vb.net中,如果我使用AddHandler,我是否必须使用RemoveHandler?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7436024/

相关文章:

vb.net - DataGridView 中的额外行

iphone - 使用 XCode Instruments 解释 iPhone 开发内存警告的新功能,需要指导

memory - 使用什么来查看 Spark 的内存使用情况(使用 YARN)?

c - 我需要减少项目中使用的所有目标文件的文本段

vb.net - 如何在 vb.net 中对 DataTable 中的列进行重新排序?

C# 你打算调用方法吗

c++ - 使用计数器手动查找内存泄漏

ios - 内存管理 - 如何在不创建新实例的情况下显示已实例化的 ViewController

.net - vb.net 中的 session 管理

c# - 安装 VS2012 后 System.Uri.ToString 行为发生变化