传递字符串时ByRef vs ByVal的性能

Clé*_*ent 4 vb.net string performance byref byval

阅读哪个更快?ByVal还是ByRef?让我想知道那里的评论是否适用Strings于表现.由于字符串在传递之前被复制,因此传递字符串是不是更有效(如果被调用者不需要字符串过程的副本)ByRef?

谢谢,
CFP.

编辑:考虑一下这段代码,这让我觉得有一些副本正在进行:

Sub Main()
    Dim ByValStr As String = "Hello World (ByVal)!"
    Dim ByRefStr As String = "Hello World (ByRef)!"

    fooval(ByValStr)
    fooref(ByRefStr)

    Console.WriteLine("ByVal: " & ByValStr)
    Console.WriteLine("ByRef: " & ByRefStr)

    Console.ReadLine()
End Sub


Sub fooval(ByVal Str As String)
    Str = "foobar"
End Sub

Sub fooref(ByRef Str As String)
    Str = "foobar"
End Sub
Run Code Online (Sandbox Code Playgroud)

它输出:

ByVal: Hello World (ByVal)!
ByRef: foobar
Run Code Online (Sandbox Code Playgroud)

Luk*_*keH 9

字符串不被传递之前复制.字符串是引用类型,即使它们的行为有点像值类型.

您应该在您的要求的上下文中使用最有意义的内容.(如果你的要求碰巧是"必须以牺牲所有其他考虑因素为代价挤压每一个纳秒的性能"那么你应该破解探查器而不是询问堆栈溢出!)

这几乎肯定是你不必担心的事情,我怀疑是否存在显着的性能差异.我可以看到任何差异的唯一情况是传递大值类型.

  • 这就是为什么字符串在.NET中是不可变的。如果不能更改基础内存的内容,则运行时可以毫无顾虑地将String传递为参考。 (2认同)