在函数之间传递字符串时,通过引用传递是否更快?

4

在C#中,传递小字符串还是大字符串引用更好?我认为,传递值会强制运行时创建输入字符串的克隆,因此速度较慢。因此,是否建议所有字符串函数都通过引用传递值呢?

1个回答

11
我认为通过传值来传递字符串会迫使运行时创建输入字符串的克隆,因此速度会变慢。
你的假设是不正确的。String 是一个引用类型 - 调用带有字符串参数的方法只是通过值复制该引用。没有克隆涉及其中。它是一个固定大小的 - 4或8个字节,这取决于您使用哪个CLR。
(即使它是一个值类型,它也必须基本上包含对其他东西的引用 - 在堆栈上直接分配可变大小的值类型是没有意义的。为变量分配多少空间?如果将变量的值更改为较短或较长的字符串会发生什么?)

因此,哪种更快,ref string a 还是 string a - Robin Rodricks
2
@Geotarget:可能只是 string a - 但你不应该仅仅基于性能来做决定,除非在极端情况下使用大值类型(这通常不是一个好主意)。你应该根据你想要的语义来做决定。 - Jon Skeet
假设我正在传输大字符串,那又怎样? - Robin Rodricks
1
@Geotarget 然后没有区别;即使传递一个大字符串,你实际上只传递了一个 引用,无论这个引用是按引用还是按值传递。 - Marc Gravell
1
正确。我已经验证过了,通过将大型项目中的所有 ref string 更改为普通的 string,并没有速度损失。 - Robin Rodricks

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接