c#和.net中的僵尸对象是什么以及如何避免它们
最近我在一次采访中问了一个关于c#中僵尸对象的问题。你能用一个简单的例子向我解释一下它们是什么吗 采访中的僵尸对象与Win表单相关,我们可以在asp.net MVC中获得这些对象吗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)
感谢您花时间解释,因为我已经搜索了它,但没有找到我能理解的示例或解释事件导致的僵尸情况如下:
class AnObjectThatWillSoonGoOutOfScope{
public AnObjectThatWillSoonGoOutOfScope(ISomeLongLivedService service){
service.SomeEvent += OnSomeEvent;
}
private void OnSomeEvent(...){...}
}
长时间服务保留对子对象的引用,该子对象在超出范围之前应该已从事件中取消订阅。您可以使用dispose模式来避免这种情况。您可以使用Ants Memory Profiler之类的工具来追踪这些信息。通常,如果您在自己的实例上订阅事件,则该问题不存在(因为subscribee和subscriber都可用于垃圾收集)。这里有一个问题,我想他们指的是事件处理程序内存泄漏问题?如果您可以在.net中获取僵尸对象,您可以在任何.net应用程序中获取它们,表单、asp、wpf,无处不在。因为它们与框架有关,而不是特定的语言。僵尸是未死亡的生物,它们打算吃掉人类的大脑(和植物)。你可以在你的花园/后院放一堆豌豆射击植物来消除你的僵尸问题。相关:这有一些关于.NET中僵尸线程的优秀信息,是什么导致它们,以及如何避免它们。不过,它没有提到僵尸对象。你确定面试问题就是这么说的吗?如果你的类是WPF控件,你可以使用弱事件管理器来帮助解决这个问题。