请大家一起来研究一下!!!!!!比较这几种循环的速度问题!!!!!

flyingZFX 2004-05-11 12:54:02
Option Explicit

Private Sub Form_Load()
Dim i As Long
Dim a As Double
Dim s As Long

a = CDbl(Timer)
Debug.Print a
For i = 1 To 1000000
s = s + 1
Next i
Debug.Print CDbl(Timer), CDbl(Timer) - a
Debug.Print "-----------------"
'===============================================
a = CDbl(Timer)
Debug.Print a
i = 1
While i <= 1000000
s = s + 1
i = i + 1
Wend
Debug.Print CDbl(Timer), CDbl(Timer) - a
Debug.Print "-----------------"
'===============================================
a = CDbl(Timer)
Debug.Print a
i = 1
Do While i <= 1000000
s = s + 1
i = i + 1
Loop
Debug.Print CDbl(Timer), CDbl(Timer) - a
Debug.Print "-----------------"


End Sub


第一次结果
2911.331
2911.40087890625 .069878906249869
-----------------
2911.401
2911.55102539063 .15002539062516
-----------------
2911.551
2911.64111328125 9.01132812500691E-02
-----------------


第二次结果
2939.574
2939.64404296875 7.00429687499309E-02
-----------------
2939.644
2939.78393554688 .139935546875222
-----------------
2939.784
2939.8740234375 9.00234374998945E-02

第三次结果
3068.549
3068.61889648438 6.98964843750218E-02
-----------------
3068.619
3068.77001953125 .151019531249858
-----------------
3068.78
3068.86010742188 8.01074218747999E-02
-----------------



...全文
127 点赞 收藏 28
写回复
28 条回复
hanshufan 2004年06月09日
语法:

DO WHILE lExpression
Commands
[LOOP]
[EXIT]
ENDDO

参数:
lExpression 为一逻辑表达式,其值如果是“真”,即执行commands程序组,如果表达的值为“假”,则跳过该段程序组,执行enddo后面的语句。

如果 lExpression 的值为真,则执行 commands 程序组,该程序组执行完后,就到enddo语句,enddo会将程序返回 do while 再次验证 lExpression 是否为真,如仍是,则又一次执行 commands ,如此循环往复,直到 lExpression 为假,或遇上 exit 语句
所以我觉得它会比for循环慢!!!
回复 点赞
hanshufan 2004年06月09日
我也觉得for循环比较快一些!!
回复 点赞
flyingZFX 2004年06月09日
没想到,连问题的数据也都丢失了
回复 点赞
wooin 2004年06月09日
vb的timer太不准了,千万不要用了,自己用timegettime或者timegetsystemtime做定时器吧
回复 点赞
juror 2004年06月09日
回复 点赞
BitBlt 2004年05月14日
Private Declare Function GetTickCount Lib "kernel32" () As Long

把你的程序中所有的CDbl(Timer)改成GetTickCount就行了,单位是毫秒。
回复 点赞
slmn 2004年05月14日
gz
回复 点赞
flyingZFX 2004年05月14日
TO pigpag(噼里啪啦 - How to prepare for the TOEFL test?) ::

悲衰的人呀!!!!
可怜的人呀??
学海无涯!!!!!!!(中国落后+死板教育制度下的人呀!!!!)
快醒来吧!!!!!

TO BitBlt(Raster Operater)::

大哥,不要光说,把你说的方法贴出来让大家看看!!!
回复 点赞
flyingZFX 2004年05月14日
TO hackate(今生穷死了)::

哼!!

你就这么在乎分呀!!!!!!!!!!!!

人家看看都想着看到你!!!!!!!!!1

可是你却对我说,你讨厌我???????????

为什么呀??????
回复 点赞
Kivic 2004年05月14日
这个测试不能说明问题,没有测试环境,测试的内容基本是不相关的语句,没有可比性,timer计时受线程限制,本身不会准确。
建议建立3个exe文件,For i = 1 To 1000000里的i不能作为测试值,用外部时间测试,不从内部计时
回复 点赞
flyingscv 2004年05月14日
这个是一样的
回复 点赞
fuanwei 2004年05月13日
我靠,现在CPU转的这么快,还在乎那一点点。
其实重要的还是你的编程思想。
回复 点赞
flyingZFX 2004年05月13日
为什么没有人进来呀,,,
是因为没有分吗???
不会吧,
难道大家一点都不关心一些技术问题吗?
回复 点赞
ryuginka 2004年05月13日
up
回复 点赞
BitBlt 2004年05月13日
我靠~~~~~~~~
你用timer测试?
用gettickcount才够准确.
回复 点赞
pigpag 2004年05月13日
//难道大家一点都不关心一些技术问题吗?

唉~~~必须去关心更重要的,譬如英语考试这类的…… :(
回复 点赞
hackate 2004年05月13日
是啊,是啊,!

呵呵,我工作了呢,没时间啊,公司那破机子上不去了啊

我在学习呢,你真小气啊,我讨厌你,还没分呢,哼
回复 点赞
flyingZFX 2004年05月12日
To Hackate(今生穷死了)!!!

喂!!!!

你已经很长时间没有上MSN了,,怎么回事了!!

我都想你了!!!!
你呀!就会说没有用的!!不会说点意见呀!!!
回复 点赞
flyingZFX 2004年05月11日
自己顶一下!!!!!

为什么看不见呢!!

CSDN有什么问题呀????
回复 点赞
longki 2004年05月11日

在我的观点中,好像for循环比while循环好,do...while就没试过!
回复 点赞
发动态
发帖子
VB基础类
创建于2007-09-28

2749

社区成员

19.7w+

社区内容

VB 基础类
社区公告
暂无公告