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

 更新时间:2013年07月24日 10:45:36   作者:  
这篇文章介绍了.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

相关文章

  • asp.net实现的计算网页下载速度的代码

    asp.net实现的计算网页下载速度的代码

    刚看到有人给出asp.net实现的计算网页下载速度的方法,本方法未经本人测试,不知道能否可靠性如何。准确来说,这只是个思路吧
    2013-03-03
  • 在.NET 6中使用日志组件log4net的方法

    在.NET 6中使用日志组件log4net的方法

    本文详细讲解了Asp.Net Core中使用日志组件log4net的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-11-11
  • VS2015开发环境的安装和配置

    VS2015开发环境的安装和配置

    本文主要是给大家把C#开发环境各种版本的更新和安装过程重新整理一下贡献出来,希望对小伙伴们能够有所帮助
    2016-07-07
  • 在ASP.NET Core微服务架构下使用RabbitMQ实现CQRS模式的方法

    在ASP.NET Core微服务架构下使用RabbitMQ实现CQRS模式的方法

    ASP.NET Core微服务架构中,使用RabbitMQ作为消息队列服务,通过实现CQRS模式,将写操作和读操作分离,以提高系统的性能和可伸缩性,本文小编将为大家介绍如何在ASP.NET Core微服务架构下使用RabbitMQ来实现CQRS模式,感兴趣的朋友一起看看吧
    2024-01-01
  • .NET6导入和导出EXCEL

    .NET6导入和导出EXCEL

    这篇文章介绍了.NET6导入和导出EXCEL的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • asp.net(C#) 动态添加非ASP的标准html控件(如添加Script标签)

    asp.net(C#) 动态添加非ASP的标准html控件(如添加Script标签)

    在开发程序时,有时需要动态添加标签,而有部分又不是ASP控件,偶然找到这段代码,特收藏。
    2009-07-07
  • .net清空所有Cache的实现代码

    .net清空所有Cache的实现代码

    .net清空所有Cache的实现代码
    2009-06-06
  • asp.net 简便无刷新文件上传系统

    asp.net 简便无刷新文件上传系统

    之前写过一个仿163网盘无刷新多文件上传系统,已经对无刷新上传文件的原理做了详细的分析而这次的系统主要是针对单个file控件的,便携版,使用更简单,还有更深入的分析
    2012-05-05
  • Nginx配置实现下载文件的示例代码

    Nginx配置实现下载文件的示例代码

    这篇文章主要介绍了Nginx配置实现下载文件的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • WPF实现数据绑定

    WPF实现数据绑定

    这篇文章介绍了WPF实现数据绑定的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-01-01

最新评论