高手请进:同一个函数,变化了调用外部的循环,为何性能急剧下降
自在修行 2010-08-11 10:34:38
为了代码的一致性,我把代码段一用到的记录集操作改成了记录集转换成数组在显示,没想到这简单的一改,执行时间却增加了6倍,经过分析,性能下降的地方在GetUserName()函数的调用上,我就不明白,同一个函数,在不同的代码中反映的性能差距那么大呢?
代码段一:
使用的记录集直接操作;
d1=now()
while not rs.eof
FOR i=0 TO FieldNum-1
if rs(i).Name="uid" then
td=replace(gs_td,"[FieldValue]",GetUserName(rs(i)))
else
if not rs(i).Name="termid" then
td=td+replace(gs_td,"[FieldValue]",RepNull(rs(i)))
end if
end if
Next
html=html+"<tr>"+td+"</tr>"
rs.movenext
wend
d2=Second(now()-d1)
附函数执行时间:hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:1.15740740740389E-03 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:1.15740740740944E-03 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0
代码段二:
把记录集查询结果转换成数组了
sql="select "+fieldName+" from bk_statistics where termid= " & termid & " order by uid"
rs=db.Execute_sql(conn_bk,sql)
dim Fields
Fields=split(FieldName,",")
FieldNum=ubound(Fields)
html=replace(html,"uid","姓名")
if isarray(rs) then
d1=now()
rs_num=ubound(RS,2)
for i=0 to rs_num
FOR j=0 TO FieldNum
if Fields(j)="uid" then
td=replace(gs_td,"[FieldValue]",GetUserName(rs(j,i)))
else
td=td+replace(gs_td,"[FieldValue]",RepNull(rs(j,i)))
end if
Next
html=html+"<tr>"+td+"</tr>"
NEXT
d2=Second(now()-d1)
end if
附:函数执行时间
hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:1.15740740740389E-03 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:1.15740740740944E-03 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:1.15740740740944E-03 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:1.15740740740389E-03 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:1.15740740740944E-03 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:1.15740740740389E-03 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:1.15740740740944E-03 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:1.15740740740944E-03 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:1.15740740740389E-03 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:1.15740740740944E-03 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:1.15740740740944E-03 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:1.15740740740389E-03 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:1.15740740740944E-03 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:1.15740740740389E-03 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:1.15740740740944E-03 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:1.15740740740944E-03 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:1.15740740740389E-03 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0 hs:0
function getUserName(uid)
set db=server.CreateObject("schoolnet.db")
dim rs
rs=db.Execute_SQL(conn_base,"select username from b_member where uId="&uId)
if isarray(rs) then
getUserName=rs(0,0)
else
getUserName=""
end if
set db=nothing
end function