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

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

VB6 中使用錯(cuò)誤處理對(duì)于速度的影響

2024-07-21 02:20:35
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

 

在 vb6 中,我們使用 on error 來(lái)捕獲和處理錯(cuò)誤,而且經(jīng)常使用 on error resume next 來(lái)可能產(chǎn)生的忽略錯(cuò)誤。

那么 使用錯(cuò)誤捕獲是否會(huì)影響速度呢?

是的,使用錯(cuò)誤處理將會(huì)降低一些性能,在。net 中,使用 try catch 也將會(huì)影響性能,所以我們使用

reflector 反編譯微軟的類庫(kù)時(shí),會(huì)發(fā)現(xiàn)他的子過(guò)程很少使用 try 來(lái)捕獲錯(cuò)誤,基本都是采用可預(yù)知的方式來(lái)判斷可能出現(xiàn)的錯(cuò)誤,并做相應(yīng)處理。

實(shí)際上,使用錯(cuò)誤捕獲后,編譯后的代碼實(shí)際上做了很多不為我們所知的操作,雖然 使用錯(cuò)誤捕獲從一定程度上方便了編碼過(guò)程,卻犧牲了一定的速度,有利有弊,所以我們應(yīng)該正確的使用 錯(cuò)誤捕獲。

測(cè)試的vb6代碼

option explicit


dim cn as new adodb.connection
dim rs as new adodb.recordset
dim m_fldsname() as string


private sub command1_click()

dim ii as long
dim t as single

cn.open "provider=sqloledb.1;persist security info=false;user id=sa;initial catalog=廣商;data source=super"

rs.open "select * from fldset ", cn, adopenkeyset

do until rs.eof = true
rs.movenext
loop

rs.movefirst
t = timer

redim m_fldsname(rs.fields.count)
for ii = 0 to rs.fields.count - 1
    m_fldsname(ii) = rs.fields(ii).name
next

do until rs.eof = true
   
    readfieldsnotonerr "err1"
    readfieldsnotonerr "tablename"
    readfieldsnotonerr "err2"
   
    rs.movenext
loop
msgbox "noterr:" & timer - t

on error resume next
rs.movefirst
t = timer
do until rs.eof = true
   
    readfieldsonerr "err1"
    readfieldsonerr "tablename"
    readfieldsonerr "err2"
    rs.movenext
loop
msgbox "onerr:" & timer - t

rs.close
cn.close

end sub

private sub readfieldsonerr(fieldname as string)
    dim v as variant
    v = rs(fieldname).value

end sub


private sub readfieldsnotonerr(fieldname as string)
    dim ii as long
    dim isexists as boolean
    dim v as variant
    isexists = false
   
    for ii = 0 to ubound(m_fldsname) - 1
            if m_fldsname(ii) = fieldname then
                isexists = true
                exit for
            end if
    next
   
    if isexists = true then
        v = rs(fieldname).value
    end if
end sub

===================================

測(cè)試結(jié)果:

無(wú)錯(cuò)誤時(shí)

readfieldsonerr :  0。46

readfieldsnotonerr : 0。47

有錯(cuò)誤時(shí)

readfieldsonerr :  0.96

readfieldsnotonerr : 0.47

可以看到:不使用錯(cuò)誤處理,速度相當(dāng)穩(wěn)定,而使用錯(cuò)誤處理時(shí),有錯(cuò)誤的情況下速度落差較大

所以 對(duì)于在循環(huán)中 頻繁調(diào)用 的子過(guò)程,建議對(duì)可能出現(xiàn)的錯(cuò)誤進(jìn)行預(yù)處理,減少使用 on error

來(lái)提升速度

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 凤凰县| 清水县| 平远县| 天气| 获嘉县| 临沭县| 碌曲县| 阿巴嘎旗| 广丰县| 桂林市| 玛沁县| 平乐县| 浪卡子县| 天等县| 许昌县| 赤城县| 共和县| 厦门市| 东乌| 来安县| 广元市| 甘泉县| 辽阳县| 石屏县| 永吉县| 兴山县| 沙坪坝区| 汽车| 无锡市| 中阳县| 东城区| 荆门市| 拜城县| 平山县| 福泉市| 垣曲县| 泰来县| 潜山县| 乌拉特后旗| 桦南县| 江西省|