铸造物体的昂贵程度如何?

时间:2009-12-17 19:04:12

标签: c# casting

  

可能重复:
  Perfomance of TypeCasting

将对象转换为另一个对象有多贵?

CustomClass instance = GenericObject as CustomClass

是否应该避免所有费用?

想看看别人怎么想这个。我确信这是非常情绪化的。

4 个答案:

答案 0 :(得分:42)

您应该避免担心特定语言功能对性能的影响,除非您有特定的证据(测量值),它们确实会导致问题。

您最关心的问题应该是代码的正确性和可维护性。

然而,作为一般观察,通过适当地应用良好的OO编程实践和使用泛型(特别是集合),C#中通常可以避免不必要的转换。在你确实需要执行强制转换的情况下,除非你在紧密的循环中或者使用可能引发无效强制转换异常的类型,否则它不太可能成为性能瓶颈。

大多数现实世界的性能问题都来自算法选择或缺乏对平台本身的认识 - 而不是来自特定的语言特征。

答案 1 :(得分:24)

不,不应该不惜一切代价避免。铸造不是很贵。当然,如果你有一个每秒运行一百万次的循环,那么避免强制转换以保存一些性能可能是有意义的,否则它不会真正导致性能问题。

铸造的真正问题在于它的作弊类型安全性。如果你不小心的话,如果你把所有东西都放在那里,那么引入错误或降低代码的可读性并不是太难。

答案 2 :(得分:5)

如果你可以使用泛型,那么它比铸造更好。拳击和拆箱是一项昂贵的操作,如果可能应该避免。问题有时候是无法避免的。

此处提到的另一个答案是,与特定的性能问题或代码可维护性相比,担心拳击是非常微不足道的。我完全同意这一点。

答案 3 :(得分:4)

通常,在特定的基础上铸造物体的成本在大规模的事物中是低的。但是,如果您反复多次使用对象,那么当您发现它是性能问题的原因时应该尽量避免使用它。

毕竟,从.NET 1.1到2.0的一个主要改进是泛型的引入 - 这解决了强类型对象列表的问题(例如,ArrayList =基于对象,List =类型列表)