我有一堂课的终结者。但是由于我一直在调用Dispose(),而Dispose()在调用GC.SupressFinalize(this),所以我认为我的对象从未真正进入终结队列。如果该类的另一个用户忘记调用Dispose(),则终结器就在其中,作为后盾。

即使从未实现终结器并且该对象也从未进入终结器队列,仅实施终结器是否会对性能造成任何损失?

我曾经不这样认为,但是在Bill Wagner撰写的“有效C#:第二版”的第102页上,它说:“即使从未调用过,终结器的存在也会对您的类型造成相当大的性能损失。”

最佳答案

即使从未实现终结器并且该对象也从未进入终结器队列,仅实施终结器是否会对性能造成任何损失?


只要正确实现此方法并在对象上调用GC.SuppressFinalize,“惩罚”将仅在用户不调用Dispose()时发生。

话虽这么说,在大多数情况下,“严厉”的处罚实际上并不那么严厉。如果您有很多带有终结器的短期对象,这会污染您的垃圾回收过程,那么这将是一个问题,但这很少有问题,因为带有终结器的对象很少(总体)。

关于c# - 如果未调用,则终结器的性能惩罚,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4882287/

10-10 07:28