标题:VB代码执行效率问题:abs(负数) 与 0-负数,那条语句执行更快?
取消只看楼主
wufuzhang
Rank: 9Rank: 9Rank: 9
来 自:广州
等 级:贵宾
威 望:21
帖 子:206
专家分:1346
注 册:2017-8-9
结帖率:100%
已结贴  问题点数:5 回复次数:4 
VB代码执行效率问题:abs(负数) 与 0-负数,那条语句执行更快?
代码一:
Dim lngX As Long
Dim lngY As Long
If lngX<0 then
   lngY=Abs(lngX)
Else
   lngY=lngX
End if

代码二:
Dim lngX As Long
Dim lngY As Long
lngY=lngX
If lngX<0 then   lngY=0-lngX

这两段代码,哪条执行比较快?还是差不多?

搜索更多相关主题的帖子: 代码 执行 abs 负数 Dim 
2018-05-03 14:18
wufuzhang
Rank: 9Rank: 9Rank: 9
来 自:广州
等 级:贵宾
威 望:21
帖 子:206
专家分:1346
注 册:2017-8-9
得分:0 
==================
主要是不知道VB里面Abs()函数是怎么实现的,
0-负数是怎么实现的,求哪位大神指点一下。

不经历千百遍的调试,怎能体会成功时那一刹那的喜悦。
2018-05-03 15:04
wufuzhang
Rank: 9Rank: 9Rank: 9
来 自:广州
等 级:贵宾
威 望:21
帖 子:206
专家分:1346
注 册:2017-8-9
得分:0 
我把代码补全了测试结果是:IDE环境下运行Abs函数效率更高(1.4S左右,另一种方法1.7S左右),
编译后Abs函数效率更低了(0.35S左右,另一种方法0.15S左右)
@wmf2014回答得没错
现在问题来了,为什么IDE环境和编译后,两段代码执行的效率居然相反呢?
测试代码:
Private Sub Command1_Click()
  Dim t As Double, a As Long, b As Long, i As Long
  a = -1234
  t = Timer
  For i = 0 To 100000000
    b = a
    If a < 0 Then b = 0 - a
  Next
  MsgBox Timer - t
End Sub

Private Sub Command2_Click()
  Dim t As Double, a As Long, b As Long, i As Long
  a = -1234
  t = Timer
  For i = 0 To 100000000
    If a < 0 Then
       b = Abs(a)
    Else
       b = a
    End If
  Next
  MsgBox Timer - t
End Sub

不经历千百遍的调试,怎能体会成功时那一刹那的喜悦。
2018-05-03 15:35
wufuzhang
Rank: 9Rank: 9Rank: 9
来 自:广州
等 级:贵宾
威 望:21
帖 子:206
专家分:1346
注 册:2017-8-9
得分:0 
回复 4楼 wds1
可以亲测,IDE环境和编译后,两段代码执行效率相反。

不经历千百遍的调试,怎能体会成功时那一刹那的喜悦。
2018-05-03 15:38
wufuzhang
Rank: 9Rank: 9Rank: 9
来 自:广州
等 级:贵宾
威 望:21
帖 子:206
专家分:1346
注 册:2017-8-9
得分:0 
回复 10楼 风吹过b
大神就是大神,有理有据,讲的很透彻,我自己也测试了,确实是这样。

我们更关注的是编译后的可执行.exe文件的执行效率,因为这个才是客户的体验。

代码少些一句(b=a),函数少调用一个(abs),我们的程序就会跑的更快一点。

PS:CUP Disasm 后面一大串东东在哪里可以看到?

不经历千百遍的调试,怎能体会成功时那一刹那的喜悦。
2018-05-04 11:59



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-486584-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.846136 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved