|
![]() |
名片设计 CorelDRAW Illustrator AuotoCAD Painter 其他软件 Photoshop Fireworks Flash |
|
程序运行速度试验结果: 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输出方式速度提高及测试 |
![]() ![]() |
快精灵印艺坊 版权所有 |
首页![]() ![]() ![]() ![]() ![]() ![]() ![]() |