2014-09-12 41 views
-2

在像C++这样的非托管语言中,我可以使用delete运算符来删除对象。但是.NET平台是被管理的,所以只有垃圾收集器可以从内存中删除对象。我们只能删除对象的所有引用,并且垃圾收集器会在某个时间收集它。但是我想要执行对象的即时删除。是否有可能在.NET中手动删除对象?

有没有办法使用C++库删除对象?主要思想:使用mscoree.dll使用DllImport属性

删除对象

  • 参考C++库从.NET

    1. 创建C++库
    2. 定义方法DeleteUnsafe(void* pointer)是否有可能进行第二步?或者用其他方式来实现我的目标?什么是起点?

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

  • +2

    'GC.Collect()'是最接近你会得到,但你需要一个非常好的理由骚扰内置的垃圾收集机制。你想要这么做的理由是什么? – 2014-09-12 11:42:36

    +0

    “我想执行对象的即时删除”。你确定你需要吗?为什么? – spender 2014-09-12 11:43:23

    +0

    @AlexK。假设我想要编写替代垃圾回收器 – 2014-09-12 11:44:15

    回答

    0

    不太确定你为什么要这样做,但我会假设你有一个理由。

    想到什么会迫使垃圾收集,但这里是从MS报价:

    “这是可能通过调用收集到强制进行垃圾收集,但 大部分时间,这应该避免因为它可能会创建 性能问题“

    (你可以看看这里的更多:。https://stackoverflow.com/a/233647/1698987

    其他,如果你再盟友需要这种良好的控制,也许C#不是答案?

    嗯...看看this msdn page。似乎打电话GC.Collect method假设你知道你在做什么不是那么糟糕...... :)

    +0

    假设我想要编写替代垃圾回收器 – 2014-09-12 11:44:47

    相关问题