答案:程序运行速度试验结果:作相同的分支条件判断:IF 比 SELECT慢。用以下程序测试:
<%
dim tttt1,ttt2
session("ii")=0
for sn=0 to 5
ttt1=now()
for i=0 to 300000
if session("ii")=0 then
session("ii")=1
else
if session("ii")=1 then
session("ii")=2
else
if session("ii")=2 then
session("ii")=3
else
session("ii")=0
end if
end if
end if
next
ttt2=now()
tou=ttt2-ttt1
Response.Write sn&"、"&tou*24*60*60&"<br>"
nextfor sn=0 to 5
ttt1=now()
for i=0 to 300000
select case session("ii")
case 0
session("ii")=1
case 1
session("ii")=2
case 2
session("ii")=3
case 3
session("ii")=0
end select
next
ttt2=now()
tou=ttt2-ttt1
Response.Write sn&"、"&tou*24*60*60&"<br>"
next%>
2, 如果把上例中的SESSION对象改为用普通的变量存。速度会快差不多8倍
3,进行字符串连接时往中间加入相同多的字符串,基数越大,越慢。
通过下面的程序测试:
<%
dim tttt1,ttt2
session("ii")=0
for sn=0 to 5
ttt1=now()
' txt=""
for i=0 to 10000
txt="a"&txt
next
ttt2=now()
tou=ttt2-ttt1
Response.Write sn&"、"&tou*24*60*60&"<br>"
next
%>
进行同样长字节的字符连接时,汉字比英文快4倍,通过下面的程序测试
<%dim tttt1,ttt2
for sn=0 to 5
ttt1=now()
txt=""
for i=0 to 20000
txt="人"&txt
next
ttt2=now()
tou=ttt2-ttt1
Response.Write sn&"、"&tou*24*60*60&"<br>"
nexttxt=""
for sn=0 to 5
ttt1=now()
txt=""
for i=0 to 20000
txt="aa"&txt
next
ttt2=now()
tou=ttt2-ttt1
Response.Write sn&"、"&tou*24*60*60&"<br>"
next%>
用FOR 循环比DO WHILE循环要快得多,用下面的程序测试,虽然FOR循环中要多一个变量,
<%
dim tttt1,ttt2for sn=0 to 5
ttt1=now()
i=0
do while i<=100000
i=i+1
loop
ttt2=now()
tou=ttt2-ttt1
Response.Write sn&"、"&tou*24*60*60&"<br>"
nextfor sn=0 to 5
ttt1=now()
ii=0
for i=0 to 100000
ii=ii+1
next
ttt2=now()
tou=ttt2-ttt1
Response.Write sn&"、"&tou*24*60*60&"<br>"
next
%>
定义5000个一个字符的SESSION并不比定义5000个有5000个字符串长的SESSION少花很多时间,两者时间差仅为近一倍,用一秒多钟。倒是生成这个5000个字符长的变量花了不少的时间,<%
dim tttt1,ttt2
c="a"
for sn=0 to 5session.abandon
ttt1=now()
for i=0 to 5000
session("s"&i)=c
next
ttt2=now()
tou=ttt2-ttt1
Response.Write sn&"、"&tou*24*60*60&":"&session("s"&i-1)&"<br>"
nextfor i=0 to 5000
c="a"&c
nextfor sn=0 to 5
session.abandon
ttt1=now()
for i=0 to 5000
session("s"&i)=c
next
ttt2=now()
tou=ttt2-ttt1
Response.Write sn&"、"&tou*24*60*60&":" &session("s"&i-1)&"<br>"
next
%>
这段程序从SN=3起就很慢,而前面非常快
<!--#include file="filetou.asp"-->
<%
dim tttt1,ttt2
for sn=0 to 5
ttt1=now()
for i=1 to 20
sql ="SELECT 名称 from user where 名称='阿余'"
Set rs=Server.CreateObject("ADODB.RecordSet")
rs.Open sql,conn,1,3
rs("名称")="阿余"
rs.update
rs.close
next
ttt2=now()
tou=ttt2-ttt1
Response.Write sn&"、"&tou*24*60*60&":"&session("s"&i-1)&"<br>"
next
%>
而这样就快多了。看来建对象很要花些时间,还有,用MOVE 0,1 和 MOVEFIRST 相比速度没有什么差别。
<!--#include file="filetou.asp"-->
<%
sql ="SELECT 名称 from user where 名称='阿余'"
Set rs=Server.CreateObject("ADODB.RecordSet")
rs.Open sql,conn,1,3
dim tttt1,ttt2
for sn=0 to 5
ttt1=now()
for i=1 to 700
rs("名称")="阿余"
rs.update
rs.movefirst
next
ttt2=now()
tou=ttt2-ttt1
Response.Write sn&"、"&tou*24*60*60&":"&session("s"&i-1)&"<br>"
next
%>而这两种方式相比,后者要慢3倍,可能是后者要重新查询,但比前面的用RS建查询后又去改,改了又关,相比,要快了不知多少。
<!--#include file="filetou.asp"-->
<%
sql ="SELECT 名称 from user where 名称='阿余'"
Set rs=Server.CreateObject("ADODB.RecordSet")
rs.Open sql,conn,1,3
dim tttt1,ttt2for sn=0 to 5
ttt1=now()
for i=1 to 700
rs("名称")="阿余"
rs.update
rs.movefirst
next
ttt2=now()
tou=ttt2-ttt1
Response.Write sn&"、"&tou*24*60*60&":"&session("s"&i-1)&"<br>"
nextfor sn=0 to 5
ttt1=now()
for i=1 to 700
SQL="UPDATE user set 名称='阿余' where 名称='阿余'"
conn.execute sql,0,-1
next
ttt2=now()
tou=ttt2-ttt1
Response.Write sn&"、"&tou*24*60*60&":"&session("s"&i-1)&"<br>"
next%>
新加一万条记录谁快?第一种方法用31秒,后者直到超时仍未完成。不得已,少掉一个0,1000条是,后者慢一半。
<!--#include file="filetou.asp"-->
<%
sql ="SELECT 名称 from user where id=0"
Set rs=Server.CreateObject("ADODB.RecordSet")
rs.Open sql,conn,1,3
dim tttt1,ttt2ttt1=now()
for i=1 to 10000
rs.addnew
rs("名称")="阿余A"
rs.update
next
ttt2=now()
tou=ttt2-ttt1
Response.Write sn&"、"&tou*24*60*60&":"&session("s"&i-1)&"<br>"
ttt1=now()
for i=1 to 10000
sql=" INSERT INTO user (名称) VALUES('阿余B')"
conn.execute sql,0,-1
next
ttt2=now()
tou=ttt2-ttt1
Response.Write sn&"、"&tou*24*60*60&
上一个:我最喜爱的十大开发工具
下一个:让ASP程序运行于非Windows平台