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不要收集这个项目,从而保留对象?
我知道这是大多数程序员会选择的东西"你为什么要这样做?".但另一方面,编程是关于尝试新事物和学习新事物.有什么建议,想法,实施吗?任何帮助将不胜感激!
是的,这是合法的.它被称为"复活".当您将this引用分配给"实时"某处时,该对象不再被视为垃圾.
您还需要使用重新注册以进行最终化GC.ReRegisterForFinalize(this),或者下次对象变为垃圾时,它将无法完成(不会调用析构函数).
您可以在本MSDN杂志文章中阅读有关对象复活的更多信息.
| 归档时间: |
|
| 查看次数: |
462 次 |
| 最近记录: |