值类型装箱引发的效率问题(vb.net)
来源:互联网 发布:网络大电影广告植入 编辑:程序博客网 时间:2024/04/30 23:07
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秒
所以为了写出更好的代码,对于装箱拆箱也要注意
- 值类型装箱引发的效率问题(vb.net)
- 剖析解决VB.NET报表问题效率低下的原因
- 基本类型与装箱基本类型的使用规律(效率相差数10倍)
- [VB.NET]求助:::ServerVersion = “sqlconn.ServerVersion”引发了“System.InvalidOperationException”类型的异常
- VB.net 类型转换问题
- double类型引发的问题
- VB.net下几种判断的执行效率
- VB.Net的类型字符
- 6个重要的.NET概念:栈,堆,值类型,引用类型,装箱,拆箱
- 6个重要的.NET概念:栈,堆,值类型,引用类型,装箱,拆箱
- 6个重要的.NET概念:栈,堆,值类型,引用类型,装箱,拆箱
- 6个重要的.NET概念: - 堆栈,堆,值类型,引用类型,装箱和拆箱
- 6个重要的.NET概念:栈,堆,值类型,引用类型,装箱,拆箱
- 6个重要的.NET概念:栈,堆,值类型,引用类型,装箱,拆箱
- [转]6个重要的.NET概念:栈,堆,值类型,引用类型,装箱,拆箱
- 6个重要的.NET概念栈,堆,值类型,引用类型,装箱,拆箱
- vb.net 常见时间类型问题
- Out 类型参数引发的问题
- 我是如何爱上vi的
- HTTP深入浅出
- 更换一个灯泡需要多少软件工程师?
- 永远的Sql Injection + PHP注射
- Struts Learning Note1 --- Overview
- 值类型装箱引发的效率问题(vb.net)
- Python快速入门
- 很久没更新
- 利用进程欺骗杀受保护进程
- 05年的经典语录之计算机科学
- 第一个“Hello World”程序
- 3月新软件提供
- 不要为金钱而活
- 郁闷的周末