C#使用事件

时间:2015-12-17 15:00:10

标签: c# events memory memory-leaks event-handling

我们有一个名为Memory Profiler的redgate工具。有了它,我们可以轻松检查内存泄漏。

现在,在C#.Net 4.0中,我们正试图找出处理事件的最佳方法,以免内存泄漏,但我们不能拥有任何内存!我们尝试的一切都没有留下痕迹!这是我们到目前为止所做的尝试:

    • 在有限的范围内,创建订阅者和发布者。让订阅者订阅发布者的MyEvent
    • 在处置时,发布者将其MyEvent设置为null
    • 退出范围
    • 结果:没有内存泄漏。
      • 在有限的范围内,创建订阅者和发布者。让订阅者订阅发布者的MyEvent
      • 在dispose上,发布者循环遍历MyEvent调用列表并从MyEvent中删除每个
      • 退出范围
      • 结果:没有内存泄漏。
        • 在有限的范围内,创建订阅者和发布者。让订阅者订阅发布者的MyEvent
        • 退出范围
        • 结果:没有内存泄漏。
      1. 现在,关于我们应该如何管理事件处理程序,有各种各样的答案,但是它们都没有带来任何泄漏的实际证据。使用我们的工具,我们的目标是获得实际问题的实际结果,但我们首先不能解决问题。

        任何想法如何实际上引发事件的内存泄漏? .Net 4.5或4.6的例子也可以。

1 个答案:

答案 0 :(得分:0)

使用带有+ =事件的静态绑定会产生内存泄漏。这是一个已知的错误,您必须手动使用 - =绑定静态时。

通过快速谷歌搜索,我现在找不到bug帖子,但是至少有一个帖子发布了v3.5。

此外,Microsoft确认内存泄漏并在此处提出建议: https://msdn.microsoft.com/library/aa970850(v=vs.100).aspx