【发布时间】:2014-09-12 11:37:50
【问题描述】:
在 C++ 等非托管语言中,我可以使用 delete 运算符删除对象。但是 .NET 平台是托管的,所以只有垃圾收集器才能从内存中删除对象。我们只能删除对对象的所有引用,垃圾收集器会在某个时候收集它。但我想立即删除对象。
有没有办法使用 C++ 库删除对象?主要思想:
- 创建 C++ 库
- 定义使用
mscoree.dll删除对象的方法DeleteUnsafe(void* pointer) - 使用
DllImport属性从.NET 引用C++ 库
是否可以执行第二步?或者使用其他方式来实现我的目标?起点是什么?
是否可以在不破坏 CLR 的情况下执行?例如,GC 会尝试收集已删除的对象。我们如何从 GC 队列中移除对象?
【问题讨论】:
-
GC.Collect()是您将获得的最接近的,但您需要一个很好的理由来干扰内置的垃圾收集机制。您想这样做的原因是什么? -
“我想立即删除对象”。你确定你需要吗?为什么?
-
啊。破解 CLR。我会退后的。不过似乎有些牵强。
-
那么,您是否下载了 .NET 源代码来研究对象的实际管理方式?这就是我的建议。当您真正找到可能的黑客入口点时,请返回此处提供代码。
-
一切皆有可能。没有什么是实用的。以前非常聪明的人和it sucked rocks 已经做过。 .NET GC 在那之后得到了更多的尊重。
标签: c# c++ .net garbage-collection clr