在VB.NET中,用于方法参数ByVal
或ByRef
的速度更快?
另外,哪个会在运行时(RAM)消耗更多资源?
我通读this question,但答案并不适用或不够具体。
最佳答案
应基于需求和关于其工作方式的知识(而不是速度)来使用Byval和ByRef参数。
http://www.developer.com/net/vb/article.php/3669066
针对Slough的评论-
哪个在运行时消耗更多资源?
参数在堆栈上传递。堆栈非常快,因为其内存分配只是指针增量,以保留新的“帧”或“分配记录”。大多数.NET参数不会超过机器寄存器的大小,因此,如果使用任何“堆栈”空间来传递参数,则其大小不会太小。实际上,基本类型和指针都在堆栈上分配。 .NET中的堆栈大小限制为1 MB。这应该使您了解参数传递消耗了多少资源。
您可能会发现这一系列文章很有趣:
Improving Performance Through Stack Allocation (.NET Memory Management: Part 2)
哪个更快? ByVal或ByRef。
最好很难准确准确地进行测量-取决于您的测量环境,但是我编写的基准测试称为1亿次,得出以下结论:
Public Sub Method1(ByRef s As String)
Dim c As String = s
End Sub
Public Sub Method2(ByVal s As String)
Dim c As String = s
End Sub
Public Sub Method3(ByRef i As Integer)
Dim x As Integer = i
End Sub
Public Sub Method4(ByVal i As Integer)
Dim x As Integer = i
End Sub
Sub Main()
Dim s As String = "Hello World!"
Dim k As Integer = 5
Dim t As New Stopwatch
t.Reset()
t.Start()
For i As Integer = 0 To 100000000
Method1(s)
Next
t.Stop()
Console.WriteLine("Reference Type - ByRef " & t.ElapsedMilliseconds)
t.Reset()
t.Start()
For i As Integer = 0 To 100000000
Method2(s)
Next
t.Stop()
Console.WriteLine("Reference Type - ByVal " & t.ElapsedMilliseconds)
t.Reset()
t.Start()
For i As Integer = 0 To 100000000
Method3(i)
Next
t.Stop()
Console.WriteLine("Value Type - ByRef " & t.ElapsedMilliseconds)
t.Reset()
t.Start()
For i As Integer = 0 To 100000000
Method4(i)
Next
t.Stop()
Console.WriteLine("Value Type - ByVal " & t.ElapsedMilliseconds)
Console.ReadKey()
End Sub
注释掉每种方法中的变量和赋值-
可以得出这样的结论:传递引用类型(字符串,类)ByVal将节省一些时间。您可能还说传递值类型(整数,字节)-ByVal将节省一些时间。
同样,在宏大的计划中,时间可以忽略不计。更重要的是正确使用ByVal和ByRef并了解“幕后”的情况。您的例程中实现的算法最有可能肯定会多次影响程序的运行时间。
关于vb.net - 哪个更快? ByVal或ByRef?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/408101/