在像C ++这样的非托管语言中,我可以使用delete
运算符删除对象。但.NET平台是受管理的,因此只有垃圾收集器才能从内存中删除对象。我们只能删除对象的所有引用,垃圾收集器会在某个时候收集它。但我想立即删除对象。
有没有办法使用C ++库删除对象?主要想法:
DeleteUnsafe(void* pointer)
删除对象mscoree.dll
DllImport
属性是否可以执行第二步?或者用另一种方式来实现我的目标?起点是什么?
是否可以在不破坏CLR的情况下执行?例如,GC将尝试收集已删除的对象。我们如何从GC队列中删除对象?
答案 0 :(得分:0)
不太确定你想要这样做的原因,但我认为你有理由。
我想到的是强制垃圾收集,但这里引用了MS:
"可以通过调用Collect来强制进行垃圾回收,但是 大部分时间,这应该避免,因为它可能会创建 性能问题。 "
(您可以在此处查看更多内容:https://stackoverflow.com/a/233647/1698987。
除此之外,如果你真的需要那种精细的控制,也许c#ain的答案是什么?
嗯......看看this msdn page。似乎在调用GC.Collect method
时,假设您知道自己在做什么并不是那么糟糕......:)