快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

VB6 中 善用 ByRef 提升速度

  和.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


返回类别: 教程
上一教程: 将ASP.net中的Table中的数据导入到Execl
下一教程: ASP.NET 2.0轻松实现数据库应用开发

您可以阅读与"VB6 中 善用 ByRef 提升速度"相关的教程:
· VB6 中使用错误处理对于速度的影响
· .Net 下区别使用 ByRef/ByVal 的重要性
    微笑服务 优质保证 索取样品