开贴请求超级大笨狼或者用过超级大笨狼树结构的朋友前来答惑~!关于运行效率的问题。

研究汽车的米舞指 2003-12-19 03:26:34
我改编了一下超级大笨狼的树,数据库是sql,放在内网另一台机器上,程序在本机。基本上没变,只是加了计算一级菜单的代码,当我读取200条数据的时候,花了5秒钟,太慢了!
代码如下:

<!--#include file="test.asp" -->
<!--#include file="connuser.asp" -->
<%

if session("nuserid")="" then
response.redirect "login.asp"
else
nuserid=session("nuserid")
dwid=request("dw")
end if
%>
<html>
<head>
<META name=VI60_defaultClientScript content=VBScript>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>请选择部门</title>
</head>
<style type="text/css">
<!--
.aa {
font-size: 12px;
color: #000000;
text-align: center;
vertical-align: middle;
letter-spacing: 0px;
word-spacing: 0px;
}
-->
</style>


<body bgcolor="DEE3F7" topmargin=0>
<%
dim cn,rs,SQL ,Para,NumChild,len2num
set rs=server.createobject("ADODB.recordset")
set rs1=server.createobject("ADODB.recordset")
'看看有多少个长度为2的一级菜单,放到input里面

sqllen="select sdepartmentid from vw_p_webdepartmentright where len(sdepartmentid)=2 and nuserid="&nuserid&" and sdwid="&dwid
set rslen=server.createobject("ADODB.recordset")
rslen.open sqllen,connuser,1,1
do while not rslen.eof
strrs=strrs&rslen("sdepartmentid")&","
rslen.movenext
loop
strrs=cstr(trim(left(strrs,len(strrs)-1)))
len2num=rslen.recordcount
rslen.close
set rslen=nothing
'response.write len2num
'response.write strrs
%>
<input name=len2num id=len2num value="<%=len2num%>" type="hidden">
<input name=strrs id=strrs value="<%=strrs%>" type="hidden">
<%

sql="select sdepartmentname,sdwid,sdepartmentid from vw_p_webdepartmentright where nuserid="&nuserid
'response.write sql
rs.open SQL,connuser,3,2
if rs.eof then
response.write "尚未给你分配部门权限,请联系管理员。"
response.end
end if
'response.write sql
do while not rs.EOF
SQL1="Select sdepartmentID from vw_p_webdepartmentright where sdepartmentID like '" & rs("sdepartmentid") & "%' and sdepartmentID<>'" & rs("sdepartmentid") & "' order by sdepartmentID"
'response.write SQL1
Para=rs("sdepartmentid") & "|"
NumChild=0
rs1.open SQL1,connuser, 3,2
NumChild=rs1.RecordCount
do while not rs1.EOF
Para =Para & rs1("sdepartmentID") & "|"
rs1.MoveNext
loop
Para=cstr(trim(left(Para,len(Para)-1)))
rs1.Close
%>
<table id="T<%=rs("sdepartmentID")%>"
border=1
cellpadding=0
cellspacing=0
bordercolor="#DEE3F7"
class="aa"
abbr="<%=Para%>"
summary=<%=checkid(rs("sdepartmentID"))%>
style="cursor:hand"
onClick="passvalue('<%=rs("sdepartmentname")%>','<%=rs("sdepartmentid")%>','<%=Para%>')" >
<form name=form2>

<tr height=12>
<td width="<%=17+checkid(rs("sdepartmentID"))*20%>"
height="15" align="right">
<table width="20" height="12" border="1" cellpadding="0" cellspacing="0" bordercolor="#DEE3F7">
<tr height="12">

<td align="center" height="12" valign="middle" bordercolor="#000000" id="R<%=rs("sdepartmentID")%>" ><%if NumChild=0 then Response.Write "." else Response.Write "-"%></td>
</tr>
</table>
</td>

<td height="15"
nowrap
bordercolor="#FFFFFF"
onMouseOver="vbs:me.bgcolor='#CCCCCC':me.bordercolor='#999999'"
onMouseOut="vbs:me.bgcolor='#DEE3F7':me.bordercolor='#ffffff'"
title="dizhi">
<%=rs("sdepartmentName")%><input name=zclb value="<%=rs("sdepartmentname")%>" type=hidden></td>

</tr> </form>
</table>


<%
rs.MoveNext
loop
rs.Close
set rs=nothing

function checkid(x)
dim Tempnum
tempnum=len(x)/2-1
checkid=Tempnum
end function


%>
<script language=VBS>
function passvalue(svalue,sid,spara)
subtree spara
opener.form1.bmname.value=svalue
opener.form1.bmname2.value=svalue
opener.form1.bmid.value=sid
end function

sub subtree(Client_para)

if instr(Client_para,"|")=0 then exit sub
Myarray=split(Client_para,"|")
Mytext=eval("R" & Myarray(0) & ".innertext")
select case Mytext
case "+"
document.all.item("R" & Myarray(0)).innertext="-"
for i=1 to ubound(Myarray)
if eval("T" & Myarray(i) & ".summary")-eval("T" & Myarray(0) & ".summary")=1 then
document.all.item("T" & Myarray(i)).style.display="block"
end if
if eval("T" & Myarray(i) & ".summary")-eval("T" & Myarray(0) & ".summary")>1 then
document.all.item("T" & Myarray(i)).style.display="none"
end if
next
case "-"
document.all.item("R" & Myarray(0)).innertext="+"
for i=1 to ubound(Myarray)
if eval("T" & Myarray(i) & ".summary")-eval("T" & Myarray(0) & ".summary")>=1 then
document.all.item("T" & Myarray(i)).style.display="none"
if eval("R" & Myarray(i) & ".innertext")="-" then
document.all.item("R" & Myarray(i)).innertext="+"
end if
end if
next
end select
set Myarray=nothing
end sub

Sub document_onselectstart
document.selection.clear
End Sub

if isobject(eval("T01")) then
num=document.all.item("len2num").value
sss=document.all.item("strrs").value
sarray=split(sss,",")
for j=0 to cint(num)-1 step 1
sss=right("00"&sarray(j),2)

subtree document.all("T" & cstr(sss)).abbr


next
end if



</script>
<%
CloseDatabaseuser%>
</html>

...全文
47 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
超级大笨狼 2003-12-20
  • 打赏
  • 举报
回复
20几个就有1-2秒???不会这么慢吧?
那是你机器或者别的问题。
超级大笨狼 2003-12-20
  • 打赏
  • 举报
回复
哈哈,这就是你的不对了,5000条你参考
http://expert.csdn.net/Expert/topic/2537/2537402.xml?temp=5.227298E-02
的做法,9万条速度如飞
我这树是数据量少的做法,道理不同啊。
不适合大量数据,大量数据我说必须考虑异步调用。
光看代码都能想象出速度不会快,sd2191757 (红梅) 你还认真呢。
有空的时候再改量大防侧漏版,关于树,我已经不想花时间了
www.asptreeview.com
你到这里找好东西吧,拆迁大甩卖。
N1rvana 2003-12-19
  • 打赏
  • 举报
回复
20几个就有1-2秒???不会这么慢吧?

你在本地机器运行调试的速度是多少?
blueice2002 2003-12-19
  • 打赏
  • 举报
回复
看你的代码看不出什么,如果我碰见大笨狼我会叫他来的。
  • 打赏
  • 举报
回复
补充一下:一级菜单最多只有二十几个,编号是1,2,3,…21,22…,我需要页面打开时只显示一级菜单。根据大灰狼的提示我,增加了:
if isobject(eval("T01")) then
num=document.all.item("len2num").value
sss=document.all.item("strrs").value
sarray=split(sss,",")
for j=0 to cint(num)-1 step 1
sss=right("00"&sarray(j),2)

subtree document.all("T" & cstr(sss)).abbr

我只是想知道是我改的程序问题,还是大笨狼算法不适合大数据量,或者从sql读数据写成树就是这么慢,想知道大家用过的人怎么看~
另外,读取二十几个数据的时候,用时1~2秒,可以忍受。
读取100个数据:3秒。

前提是我本机作为程序服务器,如果是别人机器访问我,速度又慢点。
aojiankd 2003-12-19
  • 打赏
  • 举报
回复
up 关注
Primer2002cn 2003-12-19
  • 打赏
  • 举报
回复
一楼

28,407

社区成员

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

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