【发布时间】:2014-11-26 15:14:02
【问题描述】:
我正在创建一个环绕堆对象的内存持有者类,我想 确定对象的dispose对于GC来说是很给力的。
我想要类似的东西:
myObj = null; //Immediately call to ~myObj()
【问题讨论】:
-
终结器不会被确定性地调用。您可以使用
GC.Collect强制GC,但这将强制GC 运行- 这是一个严重的惩罚- 不要这样做(我提出它是因为有人可能会推荐它)。它甚至不能保证您已经设法删除了对该对象的所有强引用。您正在尝试做的事情与 .NET Framework 的一些设计理念非常矛盾。我会尝试找出一种方法来遵循这些哲学,而不是反对它们。 -
我可以创建一个 COM 对象吗?是否删除了最后调用的 IUnknown.Release 强引用?
-
我知道,但我正在一个小型库中创建我的 Memory 类供初学者使用,我希望他们对内存垃圾回收不做任何事情。
-
帮您的初学者一个忙,教他们管理昂贵资源的正确方法:
using/IDisposable。 -
如果你定义了一个终结器
~myObj(),那么你“可能做错了什么”。您应该询问有关您的实际要求的问题,以便我们以不需要您创建(或使用)终结器的方式为您提供帮助。
标签: c# .net garbage-collection destructor