Jim*_*ffa 4 .net c# garbage-collection finalizer
所以我很好奇,GC会 - 尤其是最终化 - 会x在.NET中的实例上发生:
x 什么都没有引用x有一个静态DbConnection属性y 是与...相同的类的实例 xy 仍被某事引用令我感到震惊的是,在这种情况下,x可以通过外部引用声明死亡 - 但是对它执行最终化可能会导致DbConnection在y仍然需要时进行处理并保留对它的引用.
那么,在我描述的场景中,它被x收集了吗?它最终确定了吗?或者,在收集其中任何一个实例之前,所有类型的实例都需要在堆中进行孤立吗?每个实例都会发生最终化吗?
我会这么认为,遵循的一般规则是:永远不要触摸终结器中的静态或其他共享对象?
是的,该x实例有资格获得GC.的DbConnection,因为它是静态的,是完全无关的在这种情况下的实例,并为确定对象是否符合GC无关.只要static属性包含引用,它就不会被收集.
切勿触摸终结器中的静态或共享对象?
这通常是一个很好的电话.通常,您不应该为托管类型编写终结器,除非它们包装非托管资源,此时类型除了管理该资源(理想情况下)之外什么都不做.即使这样,SafeHandle在可能的情况下使用通常也是更好的方法.
| 归档时间: |
|
| 查看次数: |
65 次 |
| 最近记录: |