首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >隐藏在BCL中的拳击?

隐藏在BCL中的拳击?
EN

Stack Overflow用户
提问于 2009-09-04 20:23:17
回答 3查看 351关注 0票数 2

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

既然过度使用boxing从来都不是一件好事,我想知道在BCL中是否还有其他一些关键的地方,您已经注意到boxing的发生了?谢谢

EN

回答 3

Stack Overflow用户

发布于 2009-09-05 00:12:12

请注意,对于提到的特定示例:

  • DateTime.Now调用系统函数的成本比装箱int高得多(即使考虑到与其关联的gen0收集频率的增加)。
  • 在windows平台上Dateime.Now的精度非常低(大多数情况下为10 -15 ms )
    • 因此调用此函数没有多大用处,如果您正在执行此操作,则很可能正在执行其他windows操作

因此,只有当分析表明这是一个问题时,您才应该担心它的内部结构。

由于微软从来没有费心去解决它,所以这似乎不太可能成为任何客户的问题。

在隐藏的分配脉络中,您更关心的可能是:

将枚举作为字典中的键进行装箱(在使用foreach on an IList rather than List时,装箱发生在其GetHashCode causes an allocation

  • Enumerator实例的每个access).

  • Classes上

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

票数 3
EN

Stack Overflow用户

发布于 2009-09-04 20:39:55

首先,你是对的--这并不好。但是,埋头研究.net框架对您没有任何好处-您应该接受框架内部的现状,并希望在未来进行优化(例如,已经从2.0 SP1优化到3.5 SP1的TransactionScope )。

希望这能澄清这一点。

票数 2
EN

Stack Overflow用户

发布于 2012-07-17 12:23:45

知识给你力量。

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

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

如果您的程序员知道这一点,他/她可以这样写:"path“+ "\”+ "filename“

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1381370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档