我认为通过传值来传递字符串会迫使运行时创建输入字符串的克隆,因此速度会变慢。你的假设是不正确的。String 是一个引用类型 - 调用带有字符串参数的方法只是通过值复制该引用。没有克隆涉及其中。它是一个固定大小的 - 4或8个字节,这取决于您使用哪个CLR。(即使它是一个值类型,它也必须基本上包含对其他东西的引用 - 在堆栈上直接分配可变大小的值类型是没有意义的。为变量分配多少空间?如果将变量的值更改为较短或较长的字符串会发生什么?)
ref string a
还是string a
? - Robin Rodricksstring a
- 但你不应该仅仅基于性能来做决定,除非在极端情况下使用大值类型(这通常不是一个好主意)。你应该根据你想要的语义来做决定。 - Jon Skeetref string
更改为普通的string
,并没有速度损失。 - Robin Rodricks