vb.net – 哪个更快? ByVal或ByRef?
在VB.NET中,它更快地用于方法参数,ByVal或ByRef?
此外,它在运行时消耗更多的资源? (随机存取存储器) 编辑:我阅读this question,但答案不适用或具体不够。
应该根据需求和知识来使用Byval和byref参数,它们如何不按速度工作。
http://www.developer.com/net/vb/article.php/3669066 编辑 回应斯劳的评论 – 在运行时消耗更多的资源? 参数在堆栈上传递。栈是非常快的,因为它的内存分配只是一个指针增量来保留一个新的“帧”或“分配记录”。大多数.NET参数不超过机器寄存器的大小,所以很少使用任何“堆栈”空间来传递参数。事实上,基本类型和指针都在堆栈上分配。 .NET中的堆栈大小限制为1MB。这应该让你了解参数传递消耗的资源有多少。 你可能会发现这一系列的文章很有趣: http://www.atalasoft.com/cs/blogs/rickm/archive/2008/04/15/improving-performance-through-stack-allocation-net-memory-management-part-2.aspx 哪个更快? ByVal或ByRef。 很难测量准确和仙女 – 取决于你的测量的上下文,但一个基准,我写了一个方法1亿次出现了以下: >参考类型 – Passed ByRef:420ms 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 注释每个方法中的变量和赋值 – >参考类型 – Passed ByRef:389ms 可以得出结论,传递引用类型(字符串,类)byval将节省一些时间。您还可以说传递值类型(整数,字节) – byval将节省一些时间。 再次,时间在物质的大计划中可以忽略不计。更重要的是正确使用byval和byref,并理解幕后的情况。在你的例程中实现的算法将会更多地影响你的程序的运行时。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |