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

参数中传递大量值类型的性能

  •  0
  • benPearce  · 技术社区  · 16 年前

    我目前正在阅读乔恩·斯基特的《深度C》,并且一直在阅读价值和参考类型。

    它让我想到了使用值类型作为方法参数的成本,因为传递时会复制该值。当考虑整数时,这个成本并不高,但是如果那些值参数是经过多次传递的字符串,该怎么办呢?

    使用say stringbuilder类并传递它而不是字符串类型会有好处吗?

    如果您认为该字符串很长,比如说1024个字符,并且在两个方法之间传递了几次,那么与具有相同值的StringBuilder相比,该值最终将每次传递4或8个字节的引用值,您可能会有相当大的性能改进。

    这个问题也可能突出了我对字符串类型可能缺少的一个重要理解,您可以在需要时指出这一点。

    另外,对于每个实例中的字符串,这会对垃圾收集产生什么影响?

    编辑:显然,我忘记了一条关于字符串的重要信息,它使问题无效。谢谢格罗弗。

    1 回复  |  直到 16 年前
        1
  •  8
  •   grover    16 年前

    字符串不是值类型,它们只是不可变的对象。

    传递一个字符串与任何其他对象产生相同的成本:它的引用大小,在Win32上是4个字节。

    另外注意:值类型语义(通过值传递)可以由编译器以优化的方式实现。我还没有研究过ms-jit是如何做到这一点的,但它仍然只能发送一个指向它的指针,并要求目标在写时进行复制。

    这就是我们要做的 Managed Operating System Alliance JIT/AOT编译器。