一直以來(lái)在 VB6 下,參數(shù)默認(rèn)都是按照 ByRef 傳送的,(即按地址傳送) 而在 .Net(C#,VB.Net) 下, 參數(shù)默認(rèn)是使用 ByVal (即按值傳送) 傳送的,一直沒(méi)怎么注意。 這些天在優(yōu)化程序時(shí)發(fā)現(xiàn) 當(dāng)傳送 大變量時(shí),使用默認(rèn)方式(ByVal) 效率相當(dāng)?shù)?BR>如傳入的參數(shù)變量類型 是 大字符串,數(shù)組,集合,DataSet 等 測(cè)試的關(guān)鍵代碼如下,我傳入的字符串并沒(méi)有特別大,變量越大,使用 ByRef 效率越高,當(dāng)然,當(dāng)傳入得變量可以被修改或無(wú)其他作用時(shí),可以改用 ByRef 傳 代碼如下: Private Declare Function GetTickCount Lib "kernel32" () As Int32 Private Function TestByRef(ByRef aa As String) As String aa = "1" & aa TestByRef = aa End Function Private Function TestByVal(ByVal aa As String) As String aa = "1" & aa TestByVal = aa End Function Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim teststr As String Dim Newstr As String Dim t As Int32 Dim II As Int32 teststr = "wosdfsdfdsfdsfsfdsfsfsfsfsfsfdsfdsfcvxcvxcvcxvvcxvvvxvcvxv" t = GetTickCount For II = 1 To 10000 Newstr = TestByRef(teststr) Next MsgBox("ByRef " & CStr(GetTickCount - t)) t = GetTickCount For II = 1 To 10000 Newstr = TestByVal(teststr) Next MsgBox("ByVal " & CStr(GetTickCount - t)) End Sub