可能重复:
TypeCasting的性能
作为另一个对象投射对象有多昂贵?
CustomClass instance = GenericObject as CustomClass
Run Code Online (Sandbox Code Playgroud)
是否应该避免所有费用?
想看看别人怎么想这个.我确信这是非常情绪化的.
LBu*_*kin 45
您应该避免担心特定语言功能的性能影响,除非您有特定的证据(测量),它们实际上导致了问题.
您主要关注的是代码的正确性和可维护性.
然而,作为一般观察,通过适当地应用良好的OO编程实践和使用泛型(特别是集合),C#中通常可以避免不必要的转换.在你确实需要执行强制转换的情况下,除非你在紧密的循环中或者使用可能引发无效强制转换异常的类型,否则它不太可能成为性能瓶颈.
大多数现实世界的性能问题都来自算法选择或缺乏对平台本身的认识 - 而不是来自特定的语言特征.
Tam*_*ege 26
不,不应该不惜一切代价避免.铸造不是很贵.当然,如果你有一个每秒运行一百万次的循环,那么避免强制转换以保存一些性能可能是有意义的,否则它不会真正导致性能问题.
铸造的真正问题在于它的作弊类型安全性.如果你不小心,如果你把所有的东西都扔到了地方,那么引入错误或降低代码的可读性并不是很难.
如果可以使用泛型,那么它是比强制转换更好的解决方案。装箱和拆箱是一项昂贵的操作,应尽可能避免。问题是有时无法避免。
另外,这里的另一个答案提到,与特定的性能问题或代码可维护性相比,担心像装箱这样的事情非常简单。我完全同意。
通常,在事物的总体规模上,临时创建对象的成本较低。但是,如果您多次重复投射对象,那么当您发现它是导致性能问题的原因时,应尝试避免使用它。
毕竟,从.NET 1.1到2.0的主要改进之一是引入了泛型-这解决了对象的强类型列表问题(例如ArrayList =基于对象,List =类型列表)