和.Net 中不同,VB6 中默认是使用 ByRef 来传递参数了,看来似乎没有什么可以优化得地方。

可是,实际上 如果你调用 API 得话,从 API浏览器复制下来得代码却是 强制使用 ByVal 传参得

这就给了我们优化得机会。

我又重新使用该代码 分别测试了一下 ByRef ,ByVal 得区别,结果很振奋: ByRef 比 ByVal 提高了16倍

代码如下,插入ComboBox 得字符串越长,越能显示 ByRef 得威力

Option Explicit
Private Declare Function SendMessageByRef Lib "user32" Alias "SendMessageA" (ByRef hWnd As Long, ByRef wMsg As Long, ByRef wParam As Long, ByRef lParam As Any) As Long
Private Declare Function SendMessageByVal Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Any) As Long

Private Declare Function GetTickCount Lib "kernel32" () As Long
Private Const CB_ADDSTRING = &H143
Private Sub Command1_Click()

Dim II As Long
Dim t As Long
Dim s As String

Combo1.Clear
t = GetTickCount()

'使用API ByRef
For II = 1 To 10000
s = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
重新赋值以改变地址
SendMessageByRef Combo1.hWnd, CB_ADDSTRING, 0, s

Next

MsgBox "ByRef " & GetTickCount - t

Combo1.Clear
t = GetTickCount()

' 使用API ByVal
For II = 1 To 10000
s = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
SendMessageByVal Combo1.hWnd, CB_ADDSTRING, 0, s

Next

MsgBox "ByVal " & GetTickCount - t

Combo1.Clear
t = GetTickCount()

' 使用普通 ComboBox Add
For II = 1 To 10000
s = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
Combo1.AddItem s

Next

MsgBox "ComboBox Add " & GetTickCount - t

End Sub

将 API 传参方式改为 ByRef ,可以提升速度,当然不是所有得API 得参数都能这么改,具体得看 API 函数内是否会对传入得参数进行修改,或者你是否还要继续使用 被传入得参数。

否则会引起一些错误,而有些API 是不允许使用 ByRef 传参得 .具体情况还得具体分析。当然上面得列子完全可以使用 Byref

摘自:网络整理


VB部分相关文章推荐:


☆VB6 中善用ByRef 提升速度

☆[vb] Set 语句

☆VB_Format自定义格式

☆用VB如读取内存地址

☆vb FindwindowEx的用法实例

☆进制转化进10进制数

☆收藏:如何获取当前已经打开的IE对象(VB6代码)

☆DXInput中键码的转换(VB6.0代码)

☆如何在VB6.0里动态使用具有事件的对象

☆[vb]格式输出Format函数

☆读取和写入Windows的INI文件

☆简述UTF-8编码原理及其文本文件的读写技术【转】

☆VB中的文件操作

☆VB中的文件操作文档

☆vb 中拷贝文件

☆VB反跟踪技术点滴

☆VB共享软件防破解设计技术初探(二)

☆VB共享软件防破解设计技术初探(三)

☆VB共享软件防破解设计技术初探(一)

☆RTF文件格式【转】

☆VB压缩技术

☆[vb]FSO对象模型在VB中的应用

☆VB 窗体实现文件拖拽获取路径方法

☆VB:注册表的读写

☆vb中空操作(等待)的指令、延时方法

☆VB让控件可以当标题栏拖动

☆FSO对象新建、打开、保存文件

☆获取网关IP和MAC 的VB源码

☆VB文件关联

☆vb获得本地和远程的MAC地址(网卡地址)

☆VB中ShellExeCute的应用

☆VB打开网址方法大全

☆vb简单控制音量大小及静音的方法

☆拖动无边框窗体(VB6代码)

☆VB使用FileSystemObject对象写文件

☆VB 从注册表中删除项及其某个值

☆vb 字符串转为数字和判断字符串是否是数字字符串【转】

☆vb按热键启动应用程序

☆VB的坐标系统综述

☆VB利用API函数来处理文件

☆关于VB中Shell及ShellExecute的总结与记录

☆[vb]On Error GoTo 0和On Error resume区别

☆[vb]On Error 语句

☆记录一下:在菜单上添加自绘图形的例子(VB6代码)

☆vb中findwindow的疑惑

☆[vb]FindWindow使用方法

☆常用文件类[转,无法运行通,待调试]

☆[vb]url utf-8编码

☆VB中的Unicode 和Ansi 格式

☆VB中的format格式化函数

☆VB中字符串匹配的多种方式

☆VB抓图

☆谈vb目录文件操作的三种方法-2

☆谈vb目录文件操作的三种方法-1

☆vb使用open方法读写文件

☆VB的MD5加密模块

☆VB 超简单的屏幕截图代码

☆vb以类名或窗口标题查找句柄并关闭

☆VB将配置保存到EXE本身(生成EXE木马程序)

☆VB 调用腾讯截图控件CameraDLL.dll

☆在VB6.0中怎么实现escape和unescape

☆vb求任意两线交点

☆VB中调用Windows API的注意事项[VB知识库]

☆VB 一个获得自己外网IP 地址的程序代码

☆VB程序中实现IP地址子网掩码网关DNS的更改[转]

☆在VB 中应用FSO 对象模型介绍(摘自网络)

☆[转] Vb中FSO 对象的介绍

☆VB 画坐标轴

☆VB 二进制文件的操作

☆[VB]BMP转JPG

☆VB中KeyCode常数用法

☆vb实时曲线的绘制和保存


更多精彩>>>

VB6 中 善用 ByRef 提升速度相关推荐

  1. 千兆宽带:是为了速度而提升速度吗?

    在今年的宽带世界论坛(BBWF 2016)上,有很多关于千兆宽带(Gigabit broadband)的激烈讨论:驱动力.技术选择.赚钱机会以及对家庭网络产生的影响. 千兆宽带在一些国家已经进行了部署 ...

  2. .NET Core 3中的性能提升(译文)

    回顾我们准备推出.NET Core 2.0的时候,我写了一篇博文来介绍.NET已经引入的诸多性能优化中的一部分,我很喜欢把它们放在一起讲述,也收获了很多正面反馈,因此我又给.NET Core 2.1, ...

  3. SW软件如果很卡,如何提升速度?

    SW软件如果很卡,如何提升速度? 在设计过程中,有时会发现装配体在装配中很卡,感觉电脑反射弧很长,这时候很容易让人心情烦躁,面对这样的问题,我们该如何解决呢? 1.首先打开一个装配体,点击齿轮一样的按 ...

  4. c#中的vector_.NET Core 3 中的性能提升

    (给DotNet加星标,提升.Net技能) 转自:森林蝙蝠原文:devblogs.microsoft.com英文:zhuanlan.zhihu.com/p/66152703 回顾我们准备推出.NET ...

  5. 小米手机如何把数据备份到电脑上?目前可行的备份方案有哪些?附【多种方法助力小米(安卓)手机提升速度。】

    方法一:将手机数据备份到电脑上 一:对于应用数据:手机设置--其他高级设置--备份与重置.完成本地备份后,将手机存储中"MIUI/backup/AllBackup"路径下的备份文件 ...

  6. R循环有两个_学习R语言:性能提升——速度和内存

    本文内容来自<R 语言编程艺术>(The Art of R Programming),有部分修改 时间和空间的权衡 编写快速 R 代码 向量化,字节码编译,其他方法 核心部分用编译型语言编 ...

  7. 目标检测中的性能提升方法综述

    文章目录 一.多尺度检测 1.什么是多尺度检测? 2.降低下采样率与空洞卷积 3.多尺度训练 4.优化Anchor尺寸训练 5.深层与浅层特征融合 6.SNIP,尺度归一化 7.TridentNet, ...

  8. vb6中使text控件的光标随着增加的内容向下移动

    vb6中使text控件的光标随着增加的内容向下移动 Dim i As Integer Private Sub Command1_Click() Text1.Text = Text1.Text + &q ...

  9. VB6中如何使用C#开发的WebService进行开发

    VB6中如何使用C#开发的WebService进行开发<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office ...

最新文章

  1. 21个Transformer面试题的简单回答
  2. PHP——访问网站根目录解决方案
  3. java 缓存 单例_单例模式应用:高速缓存和查找对象(转)
  4. mybatis-plus实现自动填充数据如:数据库中createTime和updateTime
  5. G - A Bug‘s Life(并查集) acm寒假集训日记22/1/2
  6. Lateral View使用指南
  7. JSON如何序列图片
  8. CAXA图文档2007服务器端,CAXA图文档客户端系统管理员操作.doc
  9. matlab 求卡方值,谁能用spss或者sas帮我做一个统计数据分析 ,求出卡方值和P值。谢谢!急需!!!!...
  10. 有什么比较适合个人日常办公管理的便签软件
  11. 用PaddlePaddle进行图像分割
  12. Shiro实现多域名登录界面
  13. 如何快速学习Python?
  14. php 屏蔽 strict standards,PHP Strict Standards:问题解决
  15. 模拟线上应用cpu100%解决方法
  16. 毛球科技|区块链如何改变商业生活
  17. java如何mock
  18. 国际c语言混乱编码大赛,国际C语言混乱代码大赛代码赏析(一)【转】
  19. java ntlm解密_java – HttpClient 4.1.1在使用NTLM进行身份验证时返回401,浏览器工作正常...
  20. HT1623驱动LCD段码屏程序

热门文章

  1. PWA 即将终结应用程序商店!
  2. 比 Java 更具争议的 PHP,处处留坑?
  3. @程序员,入行物联网的避坑指南!| 技术头条
  4. 这个使用 Python 编写的 PDF 神器你值得拥有!
  5. 高德地图联手中国气象局,积水地图 AI 版实时预测道路积水
  6. 为什么耗资数亿的12306一直都非常难用?
  7. 第 4 章 GitHub 骚操作
  8. qt获取当前正在编辑的文件名和路径_node学习——path 路径模块
  9. python类的构造函数是_python类(class)的构造函数、初始化函数、析构函数
  10. python文件审计系统_Python代码审计实战案例总结之CRLF和任意文件读取