0

有什么方法可以告诉垃圾收集器不要清理 dot net 中的某些资源。我的意思是我需要某些托管资源是干净的,但肯定不是。我没有任何实际的场景。但只是想知道这是否可能。

谢谢。

4

2 回答 2

2

除了简单地将对象的引用存储在静态变量中之外,您始终可以使用 GCHandle 添加引用。使用它的 Alloc() 方法。

然而,这是一个先有鸡还是先有蛋的问题,如果你想释放引用,那么你需要将 GCHandle 存储在某个地方,这样你就可以调用它的 Free() 方法。它实际上只在非托管代码间接引用对象(通常通过委托)的互操作场景中实用。GC 看不到这样的引用,因此必须创建一个明确的引用,GCHandle 对此很有用。否则,我能想到提出这个问题的唯一原因是,这确实需要实际使用。

于 2013-10-16T12:34:51.417 回答
1

如果您的对象仍在被引用,它将不会被收集。GC.KeepAlive()否则,您可以告诉垃圾收集器使用该方法保持对象处于活动状态。

引用指定的对象,这使得它没有资格从当前例程开始到调用此方法的位置进行垃圾收集。

于 2013-10-16T11:56:06.037 回答