国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > 綜合 > 正文

VB6 中 善用 ByRef 提升速度

2024-07-21 02:24:41
字體:
供稿:網(wǎng)友
,歡迎訪問網(wǎng)頁設(shè)計(jì)愛好者web開發(fā)。 

和.net 中不同,vb6 中默認(rèn)是使用 byref 來傳遞參數(shù)了,看來似乎沒有什么可以優(yōu)化得地方。

可是,實(shí)際上 如果你調(diào)用 api 得話,從 api瀏覽器復(fù)制下來得代碼卻是 強(qiáng)制使用 byval 傳參得

這就給了我們優(yōu)化得機(jī)會(huì)。結(jié)合以前寫得

善用 api 的sendmessage 來提高 插入 vb.combobox item 的速度

我又重新使用該代碼 分別測試了一下 byref ,byval 得區(qū)別,結(jié)果很振奮: 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 ,可以提升速度,當(dāng)然不是所有得api 得參數(shù)都能這么改,具體得看 api 函數(shù)內(nèi)是否會(huì)對(duì)傳入得參數(shù)進(jìn)行修改,或者你是否還要繼續(xù)使用 被傳入得參數(shù)。

否則會(huì)引起一些錯(cuò)誤,而有些api 是不允許使用 byref 傳參得 .具體情況還得具體分析。當(dāng)然上面得列子完全可以使用 byref


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 德钦县| 微山县| 繁昌县| 德庆县| 开原市| 南京市| 屏南县| 乌鲁木齐县| 咸宁市| 浏阳市| 明星| 德阳市| 镇宁| 马鞍山市| 内江市| 庆阳市| 陆良县| 环江| 开化县| 洮南市| 沁源县| 辽阳县| 保定市| 白水县| 中卫市| 那坡县| 浙江省| 碌曲县| 琼结县| 集贤县| 渭源县| 吴桥县| 高青县| 盐源县| SHOW| 阜康市| 介休市| 龙胜| 资兴市| 罗田县| 沽源县|