代码之家  ›  专栏  ›  技术社区  ›  bobber205

铸造一件物品有多贵?[复制品]

  •  27
  • bobber205  · 技术社区  · 15 年前

    可能重复:
    Perfomance of TypeCasting

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

    CustomClass instance = GenericObject as CustomClass
    

    是否应该避免一切成本?

    想看看别人是怎么想的。我敢肯定这是很有情境的。

    4 回复  |  直到 15 年前
        1
  •  40
  •   LBushkin    15 年前

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

    您主要关心的应该是代码的正确性和可维护性。

    然而,一般来说,在c中,只要应用良好的oo编程实践并适当地使用泛型(特别是集合),就可以避免不必要的转换。在那些确实需要执行强制转换的情况下,除非您在紧密循环中执行强制转换,或者使用可能引发无效强制转换异常的类型执行强制转换,否则它极不可能成为性能瓶颈。

    大多数现实世界中的性能问题都是由算法选择或缺乏对平台本身的认识引起的,而不是由特定的语言特性引起的。

        2
  •  21
  •   Tamas Czinege    15 年前

    不,无论如何都不应该避免。选演员不太贵。当然,如果你有一个每秒运行一百万次的循环,那么避免强制转换以节省一些性能是有意义的,否则它不会真正导致性能问题。

    铸造的真正问题是它是作弊类型的安全。如果你不小心,如果你把所有东西都放在一个地方,那么引入bug或者降低代码的可读性就不难了。

        3
  •  4
  •   Lukasz    15 年前

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

    另外,这里提到的另一个答案是,与特定的性能问题或代码可维护性相比,担心装箱之类的事情是非常微不足道的。我完全同意。

        4
  •  3
  •   AdaTheDev    15 年前

    一般来说,在一个特殊的基础上铸造一个物体的成本是很低的。但是,如果您多次重复投射对象,则在该情况下,如果发现是性能问题的原因,应尽量避免投射对象。

    毕竟,从.NET1.1到2.0的一个主要改进是引入了泛型——这解决了对象的强类型列表的问题(例如arraylist=基于对象,list=类型列表)