设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 1505|回复: 0
打印 上一主题 下一主题

[模块/函数] 【原创 / 文章】最简单的方法 VS 最高的效率

[复制链接]
跳转到指定楼层
1#
发表于 2005-8-28 05:47:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
以下两个程序实现相同功能,将长度为4的字节数组转化成长整形变量。这也是一个常用的功能。

方法一:最常规的方法,按权累加,

Public Sub test1()

    Dim t1 As Single

    Dim t2 As Single

    Dim i As Long

    Dim a(3) As Byte

    Dim b As Long

   

    a(0) = 101

    a(1) = 123

    a(2) = 232

    a(3) = 78

   

    t1 = Timer

    For i = 1 To 10000000

        b = ((CLng(a(3)) * 256 + a(2)) * 256 + a(1)) * 256 + a(0)

    Next i

    t2 = Timer

   

    Debug.Print "单次耗时: " & (t2 - t1) / 10 & "微妙"

    Debug.Print "b = " & b

End Sub

计时结果:

b = 1323858789

单次耗时: .4289063微妙

方法二:采用API复制数据,直接合并四个字节变量为一个长整形变量。

Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByVal pDest As Any, ByVal pSrc As Any, ByVal ByteLen As Long)

Public Sub test2()

    Dim t1 As Single

    Dim t2 As Single

    Dim i As Long

    Dim a(3) As Byte

    Dim b As Long

   

    a(0) = 101

    a(1) = 123

    a(2) = 232

    a(3) = 78

   

    t1 = Timer

    For i = 1 To 10000000

        CopyMemory VarPtr(b), VarPtr(a(0)), 4

    Next i

    t2 = Timer

   

    Debug.Print "单次耗时: " & (t2 - t1) / 10 & "微妙"

    Debug.Print "b = " & b

End Sub

计时结果:

b = 1323858789

单次耗时: .2820312微妙

[此贴子已经被作者于2005-9-21 22:58:05编辑过]

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-27 19:58 , Processed in 0.094079 second(s), 25 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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