僵尸在c#和.net中反对它们是什么以及如何避免它们

时间:2014-02-03 14:23:30

标签: c# asp.net .net asp.net-mvc winforms

最近我对c#中关于Zombie Objects的采访提出了一个问题。你能用一个简单的例子向我解释它们是什么吗?

该访谈中的僵尸对象与关于Win-forms的应用程序有关,我们可以在asp.net MVC中获取这些对象吗?

感谢您花时间解释,因为我已经搜索过了,我没有找到一个我能理解的例子或解释

1 个答案:

答案 0 :(得分:3)

事件引起的僵尸情况如下:

class AnObjectThatWillSoonGoOutOfScope{
  public AnObjectThatWillSoonGoOutOfScope(ISomeLongLivedService service){
    service.SomeEvent += OnSomeEvent;
  }
  private void OnSomeEvent(...){...}
}

长时间服务会在超出范围之前保留对应该从事件中取消订阅的子对象的引用。您可以使用dispose模式来避免这种情况。您可以使用像Ants Memory Profiler这样的工具来跟踪这些。通常,如果您在自己的实例上订阅事件,则问题不存在(因为订阅者和订阅者都可用于垃圾回收)。