2

最近我意识到 BCL 中的某些部分仍然使用一些“遗留”代码,这些代码可能是在框架 v2.0 中引入泛型之前编写的。显然,“遗留”代码的一部分可能会导致 CLR 执行大量装箱/拆箱操作。

由于过度使用拳击从来都不是一件好事,我想知道在 BCL 中是否还有其他一些关键的地方你注意到拳击发生了?谢谢

4

3 回答 3

3

请注意,对于提到的具体示例:

  • DateTime.Now 调用一个系统函数,其成本比 int 的装箱成本高得多(即使考虑到与之相关的增加的 gen0 收集频率)。
  • Datetime.Now 的精度在 Windows 平台上非常低(大多数情况下为 10 -15 ms)
    • 因此,无论如何调用这个函数并不是非常有用,如果你正在这样做,那么很可能你做错了什么......

因此,如果您的分析表明这是一个问题,您应该只担心它的内部。
由于 MS 从不费心修复它,因此这似乎不太可能成为任何客户的问题。

在隐藏分配静脉中,您更关心的是:

但是同样,所有这些(除了枚举作为字典中的键,这需要相当大的努力来解决)只有在你需要时才应该处理

于 2009-09-05T00:12:11.797 回答
2

一方面,你是对的——这不好。但是埋没点网框架对你没有任何好处——你应该接受框架内部的现状,并希望在未来得到优化(例如,TransactionScope已经从 2.0 优化到 3.5 SP1)。

希望清除它。

于 2009-09-04T20:39:55.217 回答
0

知识给你力量。

我最近发现了 "path" + '\' + "fileName" 是如何实现的。

中间字符'\'先装箱到一个对象,然后调用Concat(object, object, object),然后调用3次ToString,最后调用Concat(string, string, string)。

如果程序员知道这一点,他/她可能会写:“路径”+“\”+“文件名”

于 2012-07-17T04:23:44.917 回答