在BCL隐藏拳击?

时间:2009-09-04 20:23:17

标签: c# .net datetime clr boxing

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

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

3 个答案:

答案 0 :(得分:3)

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

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

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

隐藏分配静脉中你更关心的是:

但同样,所有这些(除了字典中的关键字,需要付出相当大的努力才能解决)只应该用来处理

答案 1 :(得分:2)

首先,你是对的 - 这不好。但是埋藏点网框架对你没有任何好处 - 你应该接受框架内部,并希望将来进行优化(例如,TransactionScope已经从2.0优化到3.5 SP1)。

希望清理它。

答案 2 :(得分:0)

知识赋予你力量。

我最近发现了如何实现“path”+'\'+“fileName”。

中间字符'\'首先装入一个对象,然后调用Concat(对象,对象,对象),然后调用ToString三次,最后调用Concat(字符串,字符串,字符串)。 / p>

如果程序员知道,他/她本可以写:    “path”+“\”+“filename”