gpt4 book ai didi

c# - 如果从未调用终结器的性能惩罚

转载 作者:行者123 更新时间:2023-11-30 12:35:45 31 4
gpt4 key购买 nike

我有一个带有终结器的类。但是因为我总是调用 Dispose()Dispose() 正在调用 GC.SupressFinalize(this),所以我认为我的对象实际上从来没有使其进入终结队列。终结器就在那里作为后盾,以防类的另一个用户忘记调用 Dispose()

即使从未调用终结器并且对象也从未进入终结队列,仅实现终结器是否会导致性能损失?

我以前不这么认为,但是在 Bill Wagner 的 Effective C#: Second Edition 第 102 页上,它说,“即使它从未被调用,终结器的存在也确实引入了相当大的您的类型的性能损失。”

最佳答案

Is there any performance penalty for just implementing a finalizer even if its never called and the object never makes it to the finalization queue?

只要你正确地实现它,并在你的对象上调用 GC.SuppressFinalize,“惩罚”只会在用户没有调用 Dispose() 时发生.

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

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

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com