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

bob*_*205 32 c# casting

可能重复:
TypeCasting的性能

作为另一个对象投射对象有多昂贵?

CustomClass instance = GenericObject as CustomClass
Run Code Online (Sandbox Code Playgroud)

是否应该避免所有费用?

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

LBu*_*kin 45

您应该避免担心特定语言功能的性能影响,除非您有特定的证据(测量),它们实际上导致了问题.

您主要关注的是代码的正确性和可维护性.

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

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

  • 也许你最后可以添加一些关于__类型cast__的开销的东西.有建议很高兴,但它没有回答这个问题. (112认同)
  • 对不同问题的一个很好的答案. (14认同)
  • 这个答案实际上并没有回答这个问题. (11认同)
  • 来到这里是为了了解类型转换在运行时是如何工作的,却被一个意见击中了脸,而不是问题的实际答案,这会帮助我自己做出决定。 (6认同)
  • 从技术上讲,这不能回答问题。但是,**如果您问这个问题,这就是您需要的答案**。实际上您需要直接回答问题的情况是,如果您遇到性能问题,并且发现键入强制转换的代码行就是问题-_然后您已经有了答案_。 (5认同)
  • 光顾的答案。 (4认同)
  • 这个答案属于 Quora,而不是 SO。 (2认同)
  • 这不是一个答案。 (2认同)

Tam*_*ege 26

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

铸造的真正问题在于它的作弊类型安全性.如果你不小心,如果你把所有的东西都扔到了地方,那么引入错误或降低代码的可读性并不是很难.


Luk*_*asz 6

如果可以使用泛型,那么它是比强制转换更好的解决方案。装箱和拆箱是一项昂贵的操作,应尽可能避免。问题是有时无法避免。

另外,这里的另一个答案提到,与特定的性能问题或代码可维护性相比,担心像装箱这样的事情非常简单。我完全同意。

  • 我认为拳击不适用于这里,因为OP询问的是将对象投射到对象,而不是将值投射到对象。 (6认同)

Ada*_*Dev 5

通常,在事物的总体规模上,临时创建对象的成本较低。但是,如果您多次重复投射对象,那么当您发现它是导致性能问题的原因时,应尝试避免使用它。

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