Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#和.net中的僵尸对象是什么以及如何避免它们_C#_Asp.net_.net_Asp.net Mvc_Winforms - Fatal编程技术网

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

c#和.net中的僵尸对象是什么以及如何避免它们,c#,asp.net,.net,asp.net-mvc,winforms,C#,Asp.net,.net,Asp.net Mvc,Winforms,最近我在一次采访中问了一个关于c#中僵尸对象的问题。你能用一个简单的例子向我解释一下它们是什么吗 采访中的僵尸对象与Win表单相关,我们可以在asp.net MVC中获得这些对象吗 感谢您花时间解释,因为我已经搜索了它,但没有找到我能理解的示例或解释事件导致的僵尸情况如下: class AnObjectThatWillSoonGoOutOfScope{ public AnObjectThatWillSoonGoOutOfScope(ISomeLongLivedService service)

最近我在一次采访中问了一个关于c#中僵尸对象的问题。你能用一个简单的例子向我解释一下它们是什么吗

采访中的僵尸对象与Win表单相关,我们可以在asp.net MVC中获得这些对象吗


感谢您花时间解释,因为我已经搜索了它,但没有找到我能理解的示例或解释

事件导致的僵尸情况如下:

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

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

这里有一个问题,我想他们指的是事件处理程序内存泄漏问题?如果您可以在.net中获取僵尸对象,您可以在任何.net应用程序中获取它们,表单、asp、wpf,无处不在。因为它们与框架有关,而不是特定的语言。僵尸是未死亡的生物,它们打算吃掉人类的大脑(和植物)。你可以在你的花园/后院放一堆豌豆射击植物来消除你的僵尸问题。相关:这有一些关于.NET中僵尸线程的优秀信息,是什么导致它们,以及如何避免它们。不过,它没有提到僵尸对象。你确定面试问题就是这么说的吗?如果你的类是WPF控件,你可以使用弱事件管理器来帮助解决这个问题。