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秒
所以为了写出更好的代码,对于装箱拆箱也要注意