- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个带有终结器的类。但是因为我总是调用 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/
背景 我最近在 merge 期间遇到了一个意外未 merge 的文档文件的问题。 无论出于何种原因,我搞砸了 merge 并有效地删除了文件(和其他几个文件),因为我忘记了它们的存在。 现在我想查看我
我在我的网站上使用旧的 mysql 版本和 php 版本 4。 我的表结构: | orders_status_history_id | orders_id | orders_status_id |
我是一名优秀的程序员,十分优秀!