level 13
为了放大效果,我用一个很大的数组进行测试。
莫插楼!
2012年11月11日 16点11分
1
level 13
测试代码如下:
Option Explicit
Private Sub Form_Load()
Dim a() As Variant
Dim i As Long
Const UB As Long = 10000000
ReDim a(UB)
Stop
For i = 0 To UB
a(i) = 1
Next
Stop
For i = 0 To UB
a(i) = 9.99999
Next
Stop
For i = 0 To UB
a(i) = "str"
Next
Stop
For i = 0 To UB
a(i) = "this is long string"
Next
Stop
End Sub
2012年11月11日 16点11分
3
level 13
测试完毕,只是呼吁下新手们,不要因为变体型变量方便好用就滥用它,能不用就尽量不要用,养成良好的编程习惯。等你深入之后就会明白它确实是个垃圾类型,像非常强大的C/C++语言,她有着丰富的数据类型但就是没有变体,因为不需要。
2012年11月11日 17点11分
8
level 7
对于未确定数据类型的变量,变体数据类型允许以可变方式存储数据。比如,若存储不带小数点的一个较小的数值,则变体类型变量对该数值使用整型来表示,以此类推, 这些话是书上说的,这样看来,变体型也不怎么耗用内存嘛?就是效率不行,和失去对数据类型的记录,并破坏用户应用程序,而且会使应用程序调试更加困难,
2012年11月12日 08点11分
11
只是表示而已,如果你保存数字1,打开变量监视窗口,它显示类型为Variant/Integer,如果保存1.1就显示Variant/Double,但无论保存什么都是占16Byte内存,比任何数值类型都大。如果像我这样使用变体的数组会占用非常大的内存,在实际编程中显然不合适。
2012年11月12日 09点11分
回复
@黄佐腾 :嗯,这点书上没说,我到时候测试下,
2012年11月12日 09点11分
回复 a690392431 :书上没说会自动节省内存吧?要是说了。。果断的把书扔了。VB是M$出的编译器,一切以MSDN为准。
2012年11月12日 09点11分
回复
@黄佐腾 :没说,只是说不要太经常用,但是他只说大数据就转大类型,没说小数据转换成小数据,也就是Integer或者Single,如果小数据转成大类型的话,我果断不用,
2012年11月12日 09点11分
level 6
VB本就不适合开发大型程序。中小型程序使用vb开发好处是便捷、高效、快速。
应用到实际开发情况中,1KW大小的变体数组几乎见不到的……(如果真要牵扯到大数据处理,肯定选择高效的c了,做成dll供vb调用),所以不必太纠结这个数据类型占用内存的情况,如今电脑都标配4GB,害怕不够用?
当然,养成良好的变成习惯也很重要。
2012年11月12日 13点11分
20
恩,但是理解一门语言也是要这样的,
![[Kiss]](/static/emoticons/Kiss.png)
,而不是我在纠结,呵呵,反而纠结越多,知道的越多,。
2012年11月12日 14点11分
回复 a690392431 :学得越多,越纠结……
2012年11月12日 14点11分
回复 独孤之圣 :恩,呵呵,
2012年11月12日 14点11分
level 9
顶。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
2012年11月12日 14点11分
21
吧务
level 13
存取是压缩的:
Const s = "D:\Program Files\TestVBNumb\"
Dim a(), i&
Private Sub Form_Load()
ReDim a(2047)
Print "2048Null size " & Wr("2048Null")
ReDim a(1023)
Print "1024Null size " & Wr("1024Null")
For i = 0 To 1023
a(i) = CInt(i)
Next
Print "1024Int size " & Wr("1024Int")
For i = 0 To 1023
a(i) = i
Next
Print "1024Long size " & Wr("1024Long")
For i = 0 To 1023 Step 2
a(i) = CInt(i)
Next
Print "1024LongInt size " & Wr("1024LongInt")
End Sub
Function Wr(ByVal n$)
n = s & n & ".dat"
Open n For Binary As #1
Put #1, , a
Wr = Hex(LOF(1))
Close #1
End Function
2012年11月14日 10点11分
22
写文件会自动压缩,这我倒是没试过,不过太过自动的东西我不觉得是什么好东西。
2012年11月14日 17点11分
吧务
level 13
用varptr测试:
Dim a, aa, b()
Private Sub Form_Load()
ReDim b(1023)
a = b
Print VarPtr(a(0)) - VarPtr(a)
Print VarPtr(aa) - VarPtr(a)
Print VarPtr(a(1)) - VarPtr(a(0))
End Sub
2012年11月14日 10点11分
23
哦对,这样也能说明一个Variant占16Bytes
2012年11月14日 17点11分