游戏开发论坛

 找回密码
 立即注册
搜索
查看: 8014|回复: 20

VB6的效率测试1

[复制链接]

32

主题

1583

帖子

1589

积分

金牌会员

Rank: 6Rank: 6

积分
1589
发表于 2005-8-28 23:05:00 | 显示全部楼层 |阅读模式
既然陈?想要,我就发上来,不过没有整理,很乱,大家凑合着看吧。

这是当初学习Alpha混合时候做的,目的想要看看vb的变量运算的效率。

数据中所耗时间在不同电脑上可能不同,但是可以作为参考。
(我的配置:P4A1.6G   /    256M DDR266   /GF2 MX400)


我的结果和建议是:变量中Long最快,Variant最慢;类的属性比一般变量慢得多,如果可以不用那么就不要用类的属性;所有变量都要预先定义,尽量不要让Variant出现。特别是在循环中,注意这些都可以大大提高运行速度。


------------------------------------------------------------------------------------------------------------------
VB6的效率测试1


使用long作为for的循环变量可以使循环速度较Variant(默认)快一倍(是Variant的2倍),使用Single或Double的话则快0.5~0倍(是Variant的1.5~1倍,Double更稳定)。

测试数据:循环1024*768次,使用Variant变量耗时14到20毫秒,Long为9到10,Single为15到18,double为15到16。



赋值语句耗时:
测试数据:循环1024*768次,变量赋5,使用Variant变量耗时47到53毫秒,Byte变量为64到74毫秒,integer为27到34毫秒,Long为33到43,Single为37到43,double为38到44Currency为50到65毫秒。

其他相同,变量改赋小数15.44,则,使用Variant变量耗时54到57毫秒,Byte变量为94到98毫秒(自动四舍五入到整数位15),integer为52到56毫秒,Long为58到65,Single为37到42,double为37到44。

其他相同,变量为Form对象的ScaleLeft属性,赋整数5,则耗时343到350毫秒。赋小数15.44,则耗时969到973毫秒。



'form中属性定义
Dim sSS1 As Variant

Public Property Get SS1() As Variant
SS1 = sSS1
End Property

Public Property Let SS1(ByVal vNewValue As Variant)
sSS1 = vNewValue
End Property



其他相同,变量在为Form对象下自定义的Variant属性,赋整数5,则耗时627到647毫秒。赋小数15.44,则耗时649到660毫秒。

其他相同,变量在为Form对象下自定义的Integer属性,赋整数5,则耗时405到428毫秒。赋小数15.44,则耗时782到803毫秒。

其他相同,变量在为Form对象下自定义的Long属性,赋整数5,则耗时425到452毫秒。赋小数15.44,则耗时748到753毫秒。

其他相同,变量在为Form对象下自定义的Single属性,赋整数5,则耗时418到437毫秒。赋小数15.44,则耗时1017到1035毫秒。

其他相同,变量在为Form对象下自定义的Double属性,赋整数5,则耗时383到422毫秒。赋小数15.44,则耗时424到455毫秒。




字符串:
使用定长字符串比不定长字符串速度快一倍(是不定长的2倍),定长字符串的长度对速度略有影响。

测试数据:循环1024*768次,使用String变量,变量赋"as",耗时175到192毫秒,String*2为94到99,String*10为95到103,string*20为97到115,string*40为117到130,String*50为115到124,String*60为149到170,String*80为137到149,String*100为178到188。


字符串的实际赋值长度直接影响到速度。如,String*10 赋"asdffda"时耗时为120到130毫秒。而赋""(空字符串)为88到96毫秒。





自定义类的耗时:
定义一个类Cl1,包含一个long属性、一个Single属性、一个Byte属性、一个Integer属性、一个Double属性和一个variant属性。

属性定义直接使用Public
Public L1 As Long
Public S1 As Single
Public V1 As Variant
Public B1 As Byte
Public I1 As Integer
Public D1 As Double

测试结果:

循环1024*768次,变量赋5,使用Variant变量耗时150到160毫秒,Byte变量为145到155毫秒,integer为100到101毫秒,Long为100到111,Single为110到111,double为130到140。

变长字符串:Public St1 As String
测试赋值"as",耗时221到231。赋"asdffda"耗时基本相同。


Mod运算耗时相对除法运算稍慢一点,s1 mod 2 耗时 120毫秒

函数测试:
(文本还没有找到)

73

主题

612

帖子

618

积分

高级会员

Rank: 4

积分
618
发表于 2005-8-28 23:15:00 | 显示全部楼层

Re:VB6的效率测试1

其实VB的效能地球人都知道!

73

主题

612

帖子

618

积分

高级会员

Rank: 4

积分
618
发表于 2005-8-28 23:16:00 | 显示全部楼层

Re:VB6的效率测试1

long最快因为就是windows是32位系统

89

主题

822

帖子

847

积分

高级会员

Rank: 4

积分
847
发表于 2005-8-29 09:34:00 | 显示全部楼层

Re:VB6的效率测试1

我从来不定义Integer

32

主题

1583

帖子

1589

积分

金牌会员

Rank: 6Rank: 6

积分
1589
 楼主| 发表于 2005-8-29 11:14:00 | 显示全部楼层

Re:VB6的效率测试1

我也不太定义Integer了,什么东西都是Long。
关于Long速度快的问题MSDN上有说到过。

43

主题

229

帖子

234

积分

中级会员

Rank: 3Rank: 3

积分
234
QQ
发表于 2005-9-8 19:04:00 | 显示全部楼层

Re:VB6的效率测试1

是的,我也全部用LONG,不得已时使用boolen&string

43

主题

229

帖子

234

积分

中级会员

Rank: 3Rank: 3

积分
234
QQ
发表于 2006-4-20 23:40:00 | 显示全部楼层

Re:VB6的效率测试1

支持下!

10

主题

62

帖子

68

积分

注册会员

Rank: 2

积分
68
发表于 2006-4-21 09:57:00 | 显示全部楼层

Re:VB6的效率测试1

在VB IDE中是编译成P代码再解析执行的,所以效果并不明显

将程序编译成exe,选择最快速度优化,再将高级优化全部选上,你就会知道long有多快了

与VC++编译的C程序速度差不多。就是因为很多人直接在VB IDE中测试速度,才误以为VB比C慢

3

主题

508

帖子

508

积分

高级会员

Rank: 4

积分
508
发表于 2006-4-21 10:44:00 | 显示全部楼层

Re:VB6的效率测试1

SINGLE,INTEGER我用的还是比较多的,一个是浮点一个是整数。

10

主题

62

帖子

68

积分

注册会员

Rank: 2

积分
68
发表于 2006-4-21 11:55:00 | 显示全部楼层

Re:VB6的效率测试1

Single、Double的速度一样的
这是因为现在的CPU集成FPU(浮点运算单元)
所有浮点运算都是交给FPU处理的

无论是单精度还是双精度
调入FPU后都转成80位临时浮点型进行计算
计算好后再转为Single或Double存储到变量中去

所以建议凡是需要浮点运算的地方,都是用Double
除非是写文件时才需要Single

但是要别滥用浮点型
用定点数(整数左移若干位)高效得多
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-22 08:41

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表