有没有什么办法可以告诉垃圾收集器不清理dot net中的某些资源。我的意思是我需要某些托管资源是干净的,而不是。我没有任何实际情况。但只是想知道它是否可能。
感谢。
答案 0 :(得分:2)
除了简单地将对象的引用存储在静态变量中之外,您始终可以使用GCHandle添加引用。使用它的Alloc()方法。
然而,这有点像鸡蛋和鸡蛋问题,如果您想要发布引用,那么您需要将GCHandle存储在某处,以便您可以调用其Free()方法。它实际上只适用于互操作场景,其中非托管代码通常通过委托间接引用该对象。 GC无法看到这样的引用,因此必须创建一个明确的引用,GCHandle对此有好处。否则,我可以想到提出这个问题的唯一原因,这确实需要实际使用。
答案 1 :(得分:1)
如果您的对象仍在被引用,则不会被收集。否则,您可以通过GC.KeepAlive()
方法告诉垃圾收集器使对象保持活动状态。
引用指定的对象,使其不符合垃圾条件 从当前例程开始到收集点 这个方法叫做。