.Net 下区别使用 ByRef/ByVal 的重要性

区别

 
一直以来在 VB6 下,参数默认都是按照 ByRef  传送的,(即按地址传送)

而在 .Net(C#,VB.Net) 下, 参数默认是使用 ByVal (即按值传送)  传送的,一直没怎么注意。

这些天在优化程序时发现 当传送 大变量时,使用默认方式(ByVal) 效率相当低

如传入的参数变量类型 是 大字符串,数组,集合,DataSet 等

测试的关键代码如下,我传入的字符串并没有特别大,变量越大,使用 ByRef 效率越高,当然,当传入得变量可以被修改或无其他作用时,可以改用 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

时间: 2024-12-17 20:59:44

.Net 下区别使用 ByRef/ByVal 的重要性的相关文章

.Net 下区别使用 ByRef/ByVal 的重要性 分享_实用技巧

  一直以来在 VB6 下,参数默认都是按照 ByRef  传送的,(即按地址传送) 而在 .Net(C#,VB.Net) 下, 参数默认是使用 ByVal (即按值传送)  传送的,一直没怎么注意.这些天在优化程序时发现 当传送 大变量时,使用默认方式(ByVal) 效率相当低如传入的参数变量类型 是 大字符串,数组,集合,DataSet 等测试的关键代码如下,我传入的字符串并没有特别大,变量越大,使用 ByRef 效率越高,当然,当传入得变量可以被修改或无其他作用时,可以改用 ByRef 传

服务器-关于转发和重定向,有大神可以给详细的说下区别么?

问题描述 关于转发和重定向,有大神可以给详细的说下区别么? 重定向就是在服务器端,先返回到浏览器端,然后才可以重定向到服务器端. 转发是在服务器端直接可以跳转到服务器端的另一个界面,. 有人可以详细说下重定向和转发的分别适用于何种环境下,和它们的详细区别么,谢谢了 解决方案 建议你下载一个叫fiddler的软件,它可以拦截http报文,亲自看下能加深你的理解 重定向的原理是服务器返回一个301/302的状态码,以及新的网址,客户端浏览器收到以后再请求新的页面. 转发则在客户端看来和直接返回了页面

VB.Net的ByVal和ByRef --ByVal时的浅拷贝和深拷贝

初学VB.Net ,总结一下ByVal和ByRef 1 通过ByVal传递的变量,VB.Net会复制与源值相等的一个新的变量.而ByRef则相当于引用.例如我们学习C的时候得Swap()函数 Imports System'Test that Can't Swap A and BClass MyApp Public Shared Sub Main() Dim A As Integer = 0 Dim B As Integer = 1 Console.writeline("Source: A&quo

全方位谈下新闻对网站影响的重要性

大部分一个站点出现问题,多多少少和文章编辑有关系,今天小编我就从文章质量方面来分享一下我个人的看法: 首先文章质量包括:文章的相关性.文章标题.文章主题.关键词密度.文件头文件尾的编辑.文章的原创性.违禁词. 1.文章的相关性:一个站内新闻的添加很重要,为了丰富站内内容,我们不断的往站内添加新闻来丰富站内知识.其中,文章的添加最主要的一个相关性,符合用户的需求,遵循用户的体验度. 2.文章标题:一篇文章的编辑,最吸引的是文章标题的编辑,一个新颖的标题可以为站内带来流量,吸引读者眼球. 3.文章主

VB中Byval和byref的区别

在VB中Byval 和byref怎么区别?简单来说Byval是传值,byref是传地址,ByVal :表示该参数是按值方式传递的.ByRef :表示该参数按引用方式传递.下面绿茶小编为大家详细介绍Byval 和byref的区别. 1.引用参数(ref)在可以作为引用参数在函数成员调用中传递之前,必须已明确赋值,而输出参数(out)在可以作为输出参数在函数成员调用中传递之前不一定要明确赋值,在该函数成员正常返回前都必须已明确赋值. 2.在函数内部,引用参数(ref)被视为初始已赋值,输出参数(ou

ByVal和ByRef(编写ASP子程序所用到命令)_应用技巧

ByVal 传送参数内存的一个拷贝给被调用者.也就是说,栈中压入的直接就是所传的值. ByRef 传送参数内存的实际地址给被调用者.也就是说,栈中压入的是实际内容的地址.被调用者可以直接更改该地址中的内容. ByVal是传递值 源数据不会被修改 你可以把这个值当作自己的局部变量来使用 ByRef是传递地址 , 源数据可能被修改 你对这个变量的操作将对你传入的那个变量产生影响,就像指针的感觉 实例: 复制代码 代码如下: sub Add1(ByVal no as int32)     no=no+

ByVal和ByRef(编写ASP子程序所用到命令)

ByVal 传送参数内存的一个拷贝给被调用者.也就是说,栈中压入的直接就是所传的值. ByRef 传送参数内存的实际地址给被调用者.也就是说,栈中压入的是实际内容的地址.被调用者可以直接更改该地址中的内容. ByVal是传递值 源数据不会被修改 你可以把这个值当作自己的局部变量来使用 ByRef是传递地址 , 源数据可能被修改 你对这个变量的操作将对你传入的那个变量产生影响,就像指针的感觉 实例: 复制代码 代码如下: sub Add1(ByVal no as int32)     no=no+

VB6 中 善用 ByRef 提升速度

速度   和.Net 中不同,VB6 中默认是使用 ByRef 来传递参数了,看来似乎没有什么可以优化得地方. 可是,实际上 如果你调用 API 得话,从 API浏览器复制下来得代码却是 强制使用 ByVal 传参得 这就给了我们优化得机会.结合以前写得 善用 API 的SendMessage 来提高 插入 VB.ComboBox Item 的速度 我又重新使用该代码 分别测试了一下 ByRef ,ByVal 得区别,结果很振奋: ByRef 比 ByVal 提高了16倍 代码如下,插入Comb

调用API, ByVal怎么也能修改String的值

问题描述 声明:DeclareAnsiFunctionGetComputerNameLib"kernel32"Alias"GetComputerNameA"(ByValnameAsString,ByRefnSizeAsLong)AsLong调用:DimlLengthAsLong=255DimstrNameAsString=NewString("",lLength)DimlReturnAsLonglReturn=GetComputerName(st