高手请进:同一个函数,变化了调用外部的循环,为何性能急剧下降

自在修行 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
...全文
77 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
自在修行 2010-08-19
  • 打赏
  • 举报
回复
我干脆使用sql链接语句直接把username加进来,不再单独获取,速度也大幅提升了,谢谢各位的参与
Dogfish 2010-08-12
  • 打赏
  • 举报
回复
if isarray(rs) then
getUserName=rs(0,0)
else
getUserName=""
end if

把这句换成
getUserName=""

看看
自在修行 2010-08-11
  • 打赏
  • 举报
回复
次数是一样的,可是调用耗时超过1秒的增加了好几倍,关键就是,为何在“代码二”中会出现这样的情况,难道是内存占用的问题?
Dogfish 2010-08-11
  • 打赏
  • 举报
回复
看结果,是调用GetUserName的次数多了很多次。

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧