快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

ASP中几条语句运行速度的测试

程序运行速度试验结果:
1。作一样的分支条件判定: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>"
next

for 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>"
next

txt=""
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,ttt2

for 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>"
next

for 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 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

for i=0 to 5000
c="a"&c
next

for 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,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

for 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,ttt2

ttt1=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&":"&session("s"&i-1)&"<br>"


%>

下面的程序结果说明RS新增记录较快,而删除较慢,用CONN新增慢,但删除很快。
运行的结果为:
、3.00000007264316:
、7.99999998416752:
、1.99999983888119:
、0:
后来用RS新增记录5000条,并用CONN删除这5000条, 结果为:
、17.000000202097:
、1.00000023376197:
程序为:
<!--#include file="filetou.asp"-->
<%
dim tttt1,ttt2
ttt1=now()
sql ="SELECT 名称 from user where id=0"
Set rs=Server.CreateObject("ADODB.RecordSet")
rs.Open sql,conn,1,3
for i=1 to 1000
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 1000
sql=" INSERT INTO user (名称) VALUES(\\\'阿余B\\\')"
conn.execute sql,0,-1
next
ttt2=now()
tou=ttt2-ttt1
Response.Write sn&"、"&tou*24*60*60&":"&session("s"&i-1)&"<br>"

ttt1=now()
sql ="SELECT 名称 from user where 名称=\\\'阿余A\\\'"
Set rs=Server.CreateObject("ADODB.RecordSet")
rs.Open sql,conn,1,3
do while not rs.eof
rs.delete
rs.update
rs.move 0,1
loop
ttt2=now()
tou=ttt2-ttt1
Response.Write sn&"、"&tou*24*60*60&":"&session("s"&i-1)&"<br>"


ttt1=now()
sql ="delete from user where 名称=\\\'阿余B\\\'"
conn.execute sql,0,-1
ttt2=now()
tou=ttt2-ttt1
Response.Write sn&"、"&tou*24*60*60&":"&session("s"&i-1)&"<br>"

%>
返回类别: 教程
上一教程: 自己写的一个简朴ASP调用存储过程查询
下一教程: ASP学习:URLDECODE 方式补遗

您可以阅读与"ASP中几条语句运行速度的测试"相关的教程:
· 加速ASP程序的运行速度的两种方式
· 用GETSTRING提高ASP运行速度
· ASP中缓冲的启用及执行速度的影响
· 出色ASP-镜象站点速度测试
· ASP输出方式速度提高及测试
    微笑服务 优质保证 索取样品