将对象保留在GC销毁尝试上

Ser*_*rov 7 c# garbage-collection

我在考虑回收物品的方法时得到了这个想法.我这样做是为了看看内存池是如何工作的,我意识到在99%的场景中这是非常不必要的.

但是,我有一个问题.有没有办法强制GC保持对象?换句话说,我可以告诉GC不要销毁一个对象,并说在一个可用于使用对象的列表中创建了新的引用吗?虽然我没有测试过这个问题,但是如果我在列表中添加这样的东西:

~myObject()
{
     ((List<myObject>)HttpContext.Current.Items[typeof(T).ToString()]).add(this);//Lets assume this is ASP
}
Run Code Online (Sandbox Code Playgroud)

它会将一个指向此对象的指针添加到列表中,但如果该对象被销毁,我将得到一个空指针异常,因为该对象不再存在.但是,也许我可以告诉GC不要收集这个项目,从而保留对象?

我知道这是大多数程序员会选择的东西"你为什么要这样做?".但另一方面,编程是关于尝试新事物和学习新事物.有什么建议,想法,实施吗?任何帮助将不胜感激!

por*_*ges 6

是的,这是合法的.它被称为"复活".当您将this引用分配给"实时"某处时,该对象不再被视为垃圾.

您还需要使用重新注册以进行最终化GC.ReRegisterForFinalize(this),或者下次对象变为垃圾时,它将无法完成(不会调用析构函数).

您可以在本MSDN杂志文章中阅读有关对象复活的更多信息.