我有一堂课的终结者。但是由于我一直在调用Dispose()
,而Dispose()
在调用GC.SupressFinalize(this)
,所以我认为我的对象从未真正进入终结队列。如果该类的另一个用户忘记调用Dispose()
,则终结器就在其中,作为后盾。
即使从未实现终结器并且该对象也从未进入终结器队列,仅实施终结器是否会对性能造成任何损失?
我曾经不这样认为,但是在Bill Wagner撰写的“有效C#:第二版”的第102页上,它说:“即使从未调用过,终结器的存在也会对您的类型造成相当大的性能损失。”
最佳答案
即使从未实现终结器并且该对象也从未进入终结器队列,仅实施终结器是否会对性能造成任何损失?
只要正确实现此方法并在对象上调用GC.SuppressFinalize
,“惩罚”将仅在用户不调用Dispose()
时发生。
话虽这么说,在大多数情况下,“严厉”的处罚实际上并不那么严厉。如果您有很多带有终结器的短期对象,这会污染您的垃圾回收过程,那么这将是一个问题,但这很少有问题,因为带有终结器的对象很少(总体)。
关于c# - 如果未调用,则终结器的性能惩罚,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4882287/