最近,我意识到BCL中的一些部分仍然使用一些“遗留”代码,这些代码可能是在框架的v2.0中引入泛型之前编写的。显然,部分“遗留”代码可能会导致CLR执行大量装箱/拆箱操作。
既然过度使用boxing从来都不是一件好事,我想知道在BCL中是否还有其他一些关键的地方,您已经注意到boxing的发生了?谢谢
发布于 2009-09-05 00:12:12
请注意,对于提到的特定示例:
因此,只有当分析表明这是一个问题时,您才应该担心它的内部结构。
由于微软从来没有费心去解决它,所以这似乎不太可能成为任何客户的问题。
在隐藏的分配脉络中,您更关心的可能是:
将枚举作为字典中的键进行装箱(在使用foreach on an IList rather than List时,装箱发生在其GetHashCode causes an allocation
但是同样,所有这些(可能除了作为字典中的键的枚举之外,这需要相当大的努力来解决)应该只在需要时才用处理
发布于 2009-09-04 20:39:55
首先,你是对的--这并不好。但是,埋头研究.net框架对您没有任何好处-您应该接受框架内部的现状,并希望在未来进行优化(例如,已经从2.0 SP1优化到3.5 SP1的TransactionScope )。
希望这能澄清这一点。
发布于 2012-07-17 12:23:45
知识给你力量。
我最近发现了"path“+ '\‘+ "fileName”是如何实现的。
首先将中间字符'\‘装箱到一个对象,然后调用Concat( object,object,object),然后调用ToString三次,最后调用Concat(string,string,string)。
如果您的程序员知道这一点,他/她可以这样写:"path“+ "\”+ "filename“
https://stackoverflow.com/questions/1381370
复制相似问题