Access编程交流网
  • 设为首页|收藏本站|繁体中文|手机版
  •     
  • Access培训-Access开发平台-Access行业开发

  • 首页
  • 资讯
  • 技巧
  • 源码
  • 行业
  • 资源
  • 活动
  • 关于

技巧

ACCESS数据库

启动/设置/选项/背景

修复/压缩

安全/加密/解密

快捷键

版本升级/其它等

数据表

命名方式/设计规范

表设计

查询

Sql语言基础

选择查询

更新查询

删除查询

追加查询

生成表查询

交叉表查询

SQL特定查询

查询参数

查询综合应用

界面/窗体/控件

标签

文本框

命令按钮

组合框/列表框

选项组/复选框/选项按钮

选项卡

子窗体

窗体本身/综合应用

其它

报表打印

报表设计

高级报表

模块/函数/VBA/API/系统

VBA基础

内置函数

调试/跟踪/Debug

模块/类模块

API/COM/系统相关

字符数字日期

网络通信游戏

加密解密安全

文件处理

经典算法

宏/菜单/工具栏/功能区

宏/脚本

菜单/工具栏

功能区/Ribbon

图表/图形/图像/多媒体

图表

图形/图像

音频

视频/动画

DAO/链接表/ADO/ADP

DAO/链接表/ODBC

ADO/RDO

ADP

ActiveX/第三方控件/插件

Treeview树控件

ListView列表控件

Toolbar工具栏控件

微软其它控件

Dbi-Tech

CodeJock

Grid++Report

FastReport

ComponentOne

加载项/插件/Addin

OFFICE集成/导入导出/交互

Excel导入导出/交互

Word导入导出/交互

PPT交互

Outlook控制/邮件

Text文本文件/INI/CSV

PDF/SWF/XML格式

CAD格式

Sharepoint/其它Office

SqlServer/其它数据库

表

视图

存储过程/触发器

函数

用户/权限/安全

调试/维护

SqlServer其它/综合

发布/打包/文档/帮助

开发版/运行时

打包/发布/部署

开发文档/帮助制作

Access完整行业系统

采购管理系统

销售管理系统

仓库管理系统

人力资源管理HRM

CRM管理系统

MRP/ERP管理系统

BRP/流程优化

其它管理系统

心得/经验/绝招
其它/杂项
Excel技巧

Excel应用与操作

Excel开发编程

Word技巧

Word应用与操作

Word开发编程

Outlook技巧

Outlook应用与操作

Outlook开发编程

热门文章

  • VB常见问题总结
  • 《VB函数参考手册》电子书
  • 如何调出工作组对话框
  • 将Access数据库移植到..
  • 注册代码
  • VB开发的36计(适合Ac..

最新文章

  • Access数据库设计技巧..
  • Access数据库设计技巧..
  • Access数据库设计技巧..
  • Access数据库设计技巧..
  • Access数据库设计技巧..
  • 使用Access和Exce..

联系方式

Access交流网(免费Access交流)

QQ:18449932 

网  址:www.access-cn.com

当前位置:首页 > 技巧 > 心得/经验/绝招
心得/经验/绝招

四种整数数据类型的性能对比

 在我们写VBA程序的时候,我们经常要面对数据类型定义的选择,有的情况下,业务本身对于数据类型有要求和限制,那么我们并不难以选择,有些时候却没有限制,我们可以任意选用四种整数类型(Byte,Integer,Long,Currency)中的一种,例如:
For i=1 to 100

  在这行代码中,我们该把变量i定义为什么类型的变量呢?显然四种整数类型都可以正常运行,但是他们的效率是否相同呢?我们到底该如何选择?有的人说,当时是选最小的数据类型Byte,有的人说在32位系统上,32位的Long类型才是效率最高的。

  那么究竟谁说的是正确的,让我们来进行一下这四种整数类型的性能对比测试,我们使用如下代码:



Const LoopTimes = 100000000

Public Sub test()
    Dim bytTmp As Byte
    Dim intTmp As Integer
    Dim lngTmp As Long
    Dim curTmp As Currency
    Dim loopCount As Long
    
    Dim timeBegin As Single
    Dim timeEnd As Single
    Dim timeAddition As Single
    
    timeBegin = Timer
    For loopCount = 0 To LoopTimes
    Next loopCount
    timeEnd = Timer
    timeAddition = timeEnd - timeBegin
    
    
    timeBegin = Timer
    For loopCount = 0 To LoopTimes
        bytTmp = 255
    Next loopCount
    timeEnd = Timer
    Debug.Print "Byte :"; timeEnd - timeBegin - timeAddition; "秒"

    timeBegin = Timer
    For loopCount = 0 To LoopTimes
        intTmp = 255
    Next loopCount
    timeEnd = Timer
    Debug.Print "Integer :"; timeEnd - timeBegin - timeAddition; "秒"

    timeBegin = Timer
    For loopCount = 0 To LoopTimes
        lngTmp = 255
    Next loopCount
    timeEnd = Timer
    Debug.Print "Long :"; timeEnd - timeBegin - timeAddition; "秒"

    timeBegin = Timer
    For loopCount = 0 To LoopTimes
        curTmp = 255
    Next loopCount
    timeEnd = Timer
    Debug.Print "Currency :"; timeEnd - timeBegin - timeAddition; "秒"
    Debug.Print "*********************"

End Sub


  在这里,我们对每个整数类型进行了1亿次的赋值操作,同时减去了循环控制所消耗的空转时间,剩下的就是纯粹的赋值操作所需的时间。最后,让我们来看看运行的结果:


Byte : 7.234375 秒
Integer : 2.421875 秒
Long : 3.4375 秒
Currency : 4.84375 秒
*********************
Byte : 7.234375 秒
Integer : 2.421875 秒
Long : 3.453125 秒
Currency : 4.875 秒
*********************
Byte : 7.21875 秒
Integer : 2.421875 秒
Long : 3.421875 秒
Currency : 4.875 秒
*********************

  看到这里,我想大家都应该很清楚了,虽然Byte占用内存最少,但是他的性能却是最差的,如果对于单个变量,我们没有必要使用Byte,当然Byte在大块数据段进行指针操作的时候,还是有他的非凡之处。剩下三种整数数据类型里面,Integer性能最佳,Currency性能最差。我们尽可能选择能够满足我们业务需要的最小数据类型。

  上面是赋值操作的性能对比,下面我们来进行位操作的性能对比测试,我们使用如下代码:



Const LoopTimes = 10000000

Public Sub test()
    Dim bytTmp As Byte
    Dim intTmp As Integer
    Dim lngTmp As Long
    Dim curTmp As Currency
    Dim strTmp As String
    Dim loopCount As Long
    
    Dim timeBegin As Single
    Dim timeEnd As Single
    Dim timeAddition As Single
    
    timeBegin = Timer
    For loopCount = 0 To LoopTimes
        strTmp = 255
    Next loopCount
    timeEnd = Timer
    timeAddition = timeEnd - timeBegin
    
    
    timeBegin = Timer
    For loopCount = 0 To LoopTimes
        strTmp = bytTmp Or 255
    Next loopCount
    timeEnd = Timer
    Debug.Print "Byte :"; timeEnd - timeBegin - timeAddition; "秒"

    timeBegin = Timer
    For loopCount = 0 To LoopTimes
        strTmp = intTmp Or 255
    Next loopCount
    timeEnd = Timer
    Debug.Print "Integer :"; timeEnd - timeBegin - timeAddition; "秒"

    timeBegin = Timer
    For loopCount = 0 To LoopTimes
        strTmp = lngTmp Or 255
    Next loopCount
    timeEnd = Timer
    Debug.Print "Long :"; timeEnd - timeBegin - timeAddition; "秒"

    timeBegin = Timer
    For loopCount = 0 To LoopTimes
        strTmp = curTmp Or 255
    Next loopCount
    timeEnd = Timer
    Debug.Print "Currency :"; timeEnd - timeBegin - timeAddition; "秒"
    Debug.Print "*********************"

End Sub


  这里,我们所比较的是逐位或操作,同样我们扣除了循环控制时间,赋值时间,下面让我们来看看结果:


Byte : .625 秒
Integer : .296875 秒
Long : .296875 秒
Currency : .890625 秒
*********************
Byte : .609375 秒
Integer : .34375 秒
Long : .328125 秒
Currency : .90625 秒
*********************
Byte : .484375 秒
Integer : .265625 秒
Long : .203125 秒
Currency : .8125 秒
*********************
Byte : .53125 秒
Integer : .328125 秒
Long : .28125 秒
Currency : .875 秒
*********************

  我们可以看到,在位操作项目上,Byte赶上了Currency成了第三名,而Integer和Long则咬得很紧,但是最终还是Long胜出了,看来在32位系统上,32位数据类型确实有位操作上的优势,不要以为1字节位操作就会比4字节位操作快,事实上正好相反,4字节>2字节>1字节。

  综合以上表现,我们的结论是,Byte和Currency的表现是最差的,但是这两个数据类型有他们的特殊用途,Byte适用于内存块的批量操作,Currency适用数据类型不确定的时候,剩下的Integer和Long,Integer在赋值操作上更快,Long在位操作上更快。
  现在你知道该如何选择整数数据类型了吗?


发布人:LucasLyn…-http//bbs.office-cn.net/  
分享到:
点击次数:  更新时间:2006-08-04 11:57:41  【打印此页】  【关闭】
上一条:Windows快捷方式文件格式解析  下一条:Dim的陷阱



相关文章

  • • Access数据库设计技巧-第五部分
  • • Access数据库设计技巧-第四部分
  • • Access数据库设计技巧-第二部分
  • • Access数据库设计技巧-第一部分
  • • Access数据库设计技巧-第三部分
  • • 使用Access和Excel之间的选择理由
  • • access开发应用程序的过程汇总
  • • ACCESS提示错误信息,自动崩溃,数据库损坏的问题与解决办法

热门文章

  • [2009-08-29] 以编程方式更新数据访问页链接access数据库
  • [2005-08-16] 取得档案日期相关属性access数据库
  • [2005-06-12] 使用SUBST命令行创建虚拟软驱access数据库
  • [2017-11-30] Access数据库设计技巧-第三部分access数据库
  • [2004-09-26] 求汉字文正拼音源代码access数据库
  • [2004-04-03] [初学者]为何要把数据库进行拆分access数据库

热门产品

公司动态|在线留言|在线反馈|友情链接|会员中心|站内搜索|网站地图

中山市天鸣科技发展有限公司 版权所有 1999-2023 粤ICP备10043721号

QQ:18449932

Access应用 Access培训 Access开发 Access平台

access|数据库|access下载|access教程|access视频|access软件

Powered by MetInfo 5.3.12 ©2008-2025  www.metinfo.cn