VB6 中 善用 ByRef 提公升速度

2021-08-27 04:38:02 字數 4327 閱讀 9264

和.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中的hook技術

public declare function setwindowshookex lib user32 alias setwindowshookexa byval idhook as long,byval lpfn as long,byval hmod as long,byval dwthreadi...

vb6中訪問XML文件

dim xmldoc as new msxml.domdocument dim xmlnode as ixmldomnode dim root as ixmldomnode dim node as ixmldomnode dim xmlele as ixmldomelement dim xmlatt...

VB6中模擬按鈕的實現

朋友發來乙個 vb6 的小要求 自行繪製按鈕,並且按鈕不能有控制代碼,不得用 image 控制項,需要支援單擊事件,滑鼠移動上去會變化。感覺像個考試題啊!先貼 思路就是 使用 paintpicture 在窗體上作圖,使用mousemove事件判定滑鼠是否在的位置上,如果是則繪製滑鼠移動浮動後的,否則...