VB6 中 善用 ByRef 提升速度

dfgd3qwd

dfgd3qwd

2016-01-29 13:31

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

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

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

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

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

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com)

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()

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com)

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


MsgBox "ComboBox Add " & GetTickCount - t

 

End Sub

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com)

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

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

展开更多 50%)
分享

猜你喜欢

VB6 中 善用 ByRef 提升速度

电脑网络
VB6 中 善用 ByRef 提升速度

VB6中的FSO对象模型

编程语言 网络编程
VB6中的FSO对象模型

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

VB6中动态设置报表结果

编程语言 网络编程
VB6中动态设置报表结果

asp网页提升速度方法5则

Web开发
asp网页提升速度方法5则

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

VB6 中使用错误处理对于速度的影响

电脑网络
VB6 中使用错误处理对于速度的影响

用VB6创建MTS组件

ASP
用VB6创建MTS组件

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

xml+php动态载入与分页

xml+php动态载入与分页

《沥青都市:喷射》奖杯

《沥青都市:喷射》奖杯
下拉加载更多内容 ↓