积极答复者
关于数据类型转换效率问题

问题
答案
-
你好!
静态类主要看你使用是否得当,如果使用的合适,还可以提升程序的性能!
静态成员在整个应用程序域的生命周期中都有效,这有利有弊,一方面如果你的静态成员占用的内存比较多,那这部分内存会长期得不到释放 ,另外,所有对象在整个应用程序域的生命周期中都可以使用静态成员,这一定程度上也节省了每个对象分别创建字段占用的内存!
关于静态类,可以参考:
http://msdn.microsoft.com/zh-cn/library/79b3xss3%28VS.80%29.aspx
周雪峰- 已标记为答案 原HUGO.CM 2010年5月22日 12:59
-
你好!
通常来说Convert类的静态方法在性能方面要差一些,除非必须使用它来转换,一般情况下使用强制类型转换就可以了!
周雪峰
这个可能不一定性能会差。Convert 类会检查目标类型以及源类型是否可转换 (通过检查目标类型是否实现 IConvertible),如果实现了 IConvertible,则调用 IConvertible 上的方法进行转换。SqlDataReader.this[] 其实读出来的基类型是 object,其真正类型是表达式返回的类型,因此,直接用 as,或者强制类型转换,其本身并没有涉及到 Convert,而是简单的修改了变量的类型而已。所以,这种效率是最高的。
Mark Zhou- 已标记为答案 原HUGO.CM 2010年5月24日 10:57
全部回复
-
你好!
静态类主要看你使用是否得当,如果使用的合适,还可以提升程序的性能!
静态成员在整个应用程序域的生命周期中都有效,这有利有弊,一方面如果你的静态成员占用的内存比较多,那这部分内存会长期得不到释放 ,另外,所有对象在整个应用程序域的生命周期中都可以使用静态成员,这一定程度上也节省了每个对象分别创建字段占用的内存!
关于静态类,可以参考:
http://msdn.microsoft.com/zh-cn/library/79b3xss3%28VS.80%29.aspx
周雪峰- 已标记为答案 原HUGO.CM 2010年5月22日 12:59
-
你好!
通常来说Convert类的静态方法在性能方面要差一些,除非必须使用它来转换,一般情况下使用强制类型转换就可以了!
周雪峰
这个可能不一定性能会差。Convert 类会检查目标类型以及源类型是否可转换 (通过检查目标类型是否实现 IConvertible),如果实现了 IConvertible,则调用 IConvertible 上的方法进行转换。SqlDataReader.this[] 其实读出来的基类型是 object,其真正类型是表达式返回的类型,因此,直接用 as,或者强制类型转换,其本身并没有涉及到 Convert,而是简单的修改了变量的类型而已。所以,这种效率是最高的。
Mark Zhou- 已标记为答案 原HUGO.CM 2010年5月24日 10:57
-
Mark,你好! 多谢你的指教啊!尽管Convert在设计的时候有类似的智能的检查,但是这个检查本身也是有性能开销的吧(似乎有些较真了)!
我上面的建议也不是很稳妥,更好的方式是as关键字来转换,这样可以避免强制类型转换抛出异常的可能性!
周雪峰
不客气。是的,Convert 本身一定会有性能开销的,不过这个开销可以被忽略不计。它属于 CLR 行为,而非用户行为。在我们分析性能问题的时候,往往会谈到性能开销问题 (performance hurt),现在我们更习惯性的说性能开销问题是一个副作用 (side effect) 问题,其实任何函数调用都会有性能损耗,只不过,这些损耗对于其函数本身是否是可忽略才是问题的关键。比方说,函数调用需要寄存器 + 栈协作,这部分损耗完全可以忽略的。
因此,性能问题也就是副作用大小的问题,绝对没有副作用的纯函数 (pure function) 是不存在的,
以后大家可以多多交流这方面的问题。
Mark Zhou