值类型装箱引发的效率问题(vb.net)

CLR支持2种类型:引用类型和值类型。
任何被称为“类”的类型,都是引用类型,例如System.Object,System.IO.FileStream,System.String等
 
值类型是比引用类型更为轻量级的类型,比如:Dim i as Int32=2,这个就是一个值类型变量
一般情况,值类型的使用,要比引用类型快很多,但很多情况下,值类型往往要被转换成一个引用类型来使用,这个过程被成为装箱。
比如:
        Dim j As Int32 = 1
        Dim obj As Object = j
        Dim str As String
        '需要进行一次装箱(值类型转换成System.String对象)
        str = j
进行装箱要增加更多的IL代码,假如放在循环中的话,将降低程序的效率。
我做了两个试验进行了一下对比。
第一种:
Module Module1

    Sub Main()
        Console.WriteLine(System.DateTime.Now)
        Dim intTmp As Int32 = 1
        '需要进行一次装箱(值类型转换成System.String对象)
        Dim strTmp As String = intTmp.ToString
        Dim str As String
        Dim i As Int32

        For i = 0 To 30000000
            '需要进行2次装箱(值类型转换成System.String对象)
            str = "1" & intTmp
            str = "2" & intTmp
        Next

        Console.WriteLine(System.DateTime.Now)

    End Sub

End Module
结果:
2006-3-13 21:18:54

2006-3-13 21:19:18
用了24秒
第二种:
Module Module1

    Sub Main()
        Console.WriteLine(System.DateTime.Now)
        Dim intTmp As Int32 = 1
        '需要进行一次装箱(值类型转换成System.String对象)
        Dim strTmp As String = intTmp.ToString
        Dim str As String
        Dim i As Int32

        For i = 0 To 30000000
            '不需要装箱操作
            str = "1" & strTmp
            str = "2" & strTmp
        Next

        Console.WriteLine(System.DateTime.Now)

    End Sub

End Module

 

结果:

2006-3-13 21:20:42

2006-3-13 21:20:48

用了6秒
 
所以为了写出更好的代码,对于装箱拆箱也要注意

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值