【问题标题】:Performance of passing lots of value types in parameters在参数中传递大量值类型的性能
【发布时间】:2009-04-18 13:06:39
【问题描述】:

我目前正在阅读 Jon Skeet 的 C# in Depth 并且一直在阅读有关值和引用类型的内容。

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

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

如果您认为字符串很长,例如 1024 个字符,并且在方法之间仅传递了几次,请将其与具有相同值的 StringBuilder 进行对比,后者最终会传递引用的值为 4 或每次 8 个字节,你可以有相当大的性能提升。

这个问题也可能突出我可能缺少关于字符串类型的重要理解,请随时在需要的地方指出这一点。

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

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

【问题讨论】:

    标签: .net performance


    【解决方案1】:

    String 不是值类型,它们只是不可变的对象。

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

    附加说明:值类型语义(通过值传递)可以由编译器以优化的方式实现。我还没有查看 MS JIT 是如何做到的,但它当然仍然可以只发送一个指向它的指针并要求目标在写入时进行复制。

    这就是我们将在Managed Operating System Alliance JIT/AOT 编译器中执行的操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-18
      • 2013-10-11
      • 1970-01-01
      • 2016-03-08
      • 1970-01-01
      • 2020-11-12
      • 2010-12-19
      相关资源
      最近更新 更多