是否可以在.NET中手动删除对象?

时间:2014-09-12 11:37:50

标签: c# c++ .net garbage-collection clr

在像C ++这样的非托管语言中,我可以使用delete运算符删除对象。但.NET平台是受管理的,因此只有垃圾收集器才能从内存中删除对象。我们只能删除对象的所有引用,垃圾收集器会在某个时候收集它。但我想立即删除对象。

有没有办法使用C ++库删除对象?主要想法:

  1. 创建C ++库
  2. 定义使用DeleteUnsafe(void* pointer)删除对象
  3. 的方法mscoree.dll
  4. 使用DllImport属性
  5. 参考.NET中的C ++库

    是否可以执行第二步?或者用另一种方式来实现我的目标?起点是什么?

    是否可以在不破坏CLR的情况下执行?例如,GC将尝试收集已删除的对象。我们如何从GC队列中删除对象?

1 个答案:

答案 0 :(得分:0)

不太确定你想要这样做的原因,但我认为你有理由。

我想到的是强制垃圾收集,但这里引用了MS:

  

"可以通过调用Collect来强制进行垃圾回收,但是   大部分时间,这应该避免,因为它可能会创建   性能问题。 "

(您可以在此处查看更多内容:https://stackoverflow.com/a/233647/1698987

除此之外,如果你真的需要那种精细的控制,也许c#ain的答案是什么?

嗯......看看this msdn page。似乎在调用GC.Collect method时,假设您知道自己在做什么并不是那么糟糕......:)