晓东哥
人生就是一道命题,每个人的答案可能不尽相同,但你的内容中如果完全被物欲和世俗充斥,那你得到的一定不会是最好的结局。 -------晓东
  11程序运行速度试验结果:
  2  21。作相同的分支条件判断:IF  比  SELECT慢。
  3  3用以下程序测试:
  4  4<%
  5  5dim tttt1,ttt2
  6  6session("ii")=0
  7  7for sn=0 to 5
  8  8ttt1=now()
  9  9for i=0 to 300000
 10 10   if session("ii")=0 then
 11 11      session("ii")=1
 12 12   else
 13 13     if session("ii")=1 then
 14 14      session("ii")=2
 15 15     else
 16 16       if session("ii")=2 then
 17 17          session("ii")=3
 18 18        else
 19 19           session("ii")=0
 20 20         end if
 21 21     end if
 22 22   end if
 23 23next
 24 24ttt2=now()
 25 25tou=ttt2-ttt1
 26 26Response.Write sn&""&tou*24*60*60&"<br>"
 27 27next
 28 28
 29 29for sn=0 to 5
 30 30ttt1=now()
 31 31for i=0 to 300000
 32 32   select case session("ii")
 33 33      case 0
 34 34         session("ii")=1
 35 35      case 1
 36 36         session("ii")=2
 37 37       case 2
 38 38         session("ii")=3
 39 39       case 3
 40 40         session("ii")=0
 41 41   end select
 42 42next
 43 43ttt2=now()
 44 44tou=ttt2-ttt1
 45 45Response.Write sn&""&tou*24*60*60&"<br>"
 46 46next
 47 47
 48 48%>
 49 492, 如果把上例中的SESSION对象改为用普通的变量存。速度会快差不多8倍
 50 503,进行字符串连接时往中间加入相同多的字符串,基数越大,越慢。
 51 51通过下面的程序测试:
 52 52<%
 53 53dim tttt1,ttt2
 54 54session("ii")=0
 55 55for sn=0 to 5
 56 56ttt1=now()
 57 57'  txt=""
 58 58   for i=0 to 10000
 59 59       txt="a"&txt
 60 60   next
 61 61ttt2=now()
 62 62tou=ttt2-ttt1
 63 63Response.Write sn&""&tou*24*60*60&"<br>"
 64 64next
 65 65%>
 66 66进行同样长字节的字符连接时,汉字比英文快4倍,通过下面的程序测试
 67 67<%
 68 68
 69 69dim tttt1,ttt2
 70 70for sn=0 to 5
 71 71ttt1=now()
 72 72  txt=""
 73 73   for i=0 to 20000
 74 74          txt=""&txt
 75 75   next
 76 76ttt2=now()
 77 77tou=ttt2-ttt1
 78 78Response.Write sn&""&tou*24*60*60&"<br>"
 79 79next
 80 80
 81 81txt=""
 82 82for sn=0 to 5
 83 83ttt1=now()
 84 84  txt=""
 85 85   for i=0 to 20000
 86 86          txt="aa"&txt
 87 87   next
 88 88ttt2=now()
 89 89tou=ttt2-ttt1
 90 90Response.Write sn&""&tou*24*60*60&"<br>"
 91 91next
 92 92
 93 93%>
 94 94用FOR 循环比DO  WHILE循环要快得多,用下面的程序测试,虽然FOR循环中要多一个变量,
 95 95<%
 96 96dim tttt1,ttt2
 97 97
 98 98for sn=0 to 5
 99 99ttt1=now()
100100  i=0
101101   do while i<=100000
102102      i=i+1
103103   loop
104104ttt2=now()
105105tou=ttt2-ttt1
106106Response.Write sn&""&tou*24*60*60&"<br>"
107107next
108108
109109for sn=0 to 5
110110ttt1=now()
111111   ii=0
112112   for i=0 to 100000
113113    ii=ii+1
114114   next
115115ttt2=now()
116116tou=ttt2-ttt1
117117Response.Write sn&""&tou*24*60*60&"<br>"
118118next
119119%>
120120定义5000个一个字符的SESSION并不比定义5000个有5000个字符串长的SESSION少花很多时间,两者时间差仅为近一倍,用一秒多钟。倒是生成这个5000个字符长的变量花了不少的时间,<%
121121dim tttt1,ttt2
122122c="a"
123123for sn=0 to 5
124124
125125session.abandon
126126ttt1=now()
127127   for i=0 to 5000
128128       session("s"&i)=c
129129    next
130130ttt2=now()
131131tou=ttt2-ttt1
132132Response.Write sn&""&tou*24*60*60&":"&session("s"&i-1)&"<br>"
133133next
134134
135135for i=0 to 5000
136136  c="a"&c
137137next
138138
139139for sn=0 to 5
140140session.abandon
141141ttt1=now()
142142   for i=0 to 5000
143143       session("s"&i)=c
144144    next
145145ttt2=now()
146146tou=ttt2-ttt1
147147Response.Write sn&""&tou*24*60*60&":"  &session("s"&i-1)&"<br>"
148148next
149149
150150
151151%>
152152
153153
154154这段程序从SN=3起就很慢,而前面非常快
155155<!--#include file="filetou.asp"-->
156156<%
157157dim tttt1,ttt2
158158for sn=0 to 5
159159ttt1=now()
160160  for i=1 to  20
161161   sql ="SELECT 名称  from user where 名称='阿余'"
162162   Set rs=Server.CreateObject("ADODB.RecordSet")                        
163163   rs.Open sql,conn,1,3
164164   rs("名称")="阿余"
165165   rs.update
166166   rs.close
167167next
168168ttt2=now()
169169tou=ttt2-ttt1
170170Response.Write sn&""&tou*24*60*60&":"&session("s"&i-1)&"<br>"
171171next
172172
173173
174174%>
175175
176176
177177而这样就快多了。看来建对象很要花些时间,还有,用MOVE 0,1 和  MOVEFIRST 相比速度没有什么差别。
178178<!--#include file="filetou.asp"-->
179179<%
180180   sql ="SELECT 名称  from user where 名称='阿余'"
181181   Set rs=Server.CreateObject("ADODB.RecordSet")                        
182182   rs.Open sql,conn,1,3
183183dim tttt1,ttt2 
184184for sn=0 to 5
185185ttt1=now()
186186  for i=1 to  700
187187   rs("名称")="阿余"
188188   rs.update
189189   rs.movefirst
190190next
191191ttt2=now()
192192tou=ttt2-ttt1
193193Response.Write sn&""&tou*24*60*60&":"&session("s"&i-1)&"<br>"
194194next
195195%>
196196
197197而这两种方式相比,后者要慢3倍,可能是后者要重新查询,但比前面的用RS建查询后又去改,改了又关,相比,要快了不知多少。
198198<!--#include file="filetou.asp"-->
199199<%
200200   sql ="SELECT 名称  from user where 名称='阿余'"
201201   Set rs=Server.CreateObject("ADODB.RecordSet")                        
202202   rs.Open sql,conn,1,3
203203dim tttt1,ttt2 
204204
205205for sn=0 to 5
206206ttt1=now()
207207  for i=1 to  700
208208   rs("名称")="阿余"
209209   rs.update
210210   rs.movefirst
211211next
212212ttt2=now()
213213tou=ttt2-ttt1
214214Response.Write sn&""&tou*24*60*60&":"&session("s"&i-1)&"<br>"
215215next
216216
217217for sn=0 to 5
218218ttt1=now()
219219  for i=1 to  700
220220     SQL="UPDATE user set 名称='阿余'  where 名称='阿余'"
221221     conn.execute sql,0,-1
222222next
223223ttt2=now()
224224tou=ttt2-ttt1
225225Response.Write sn&""&tou*24*60*60&":"&session("s"&i-1)&"<br>"
226226next
227227
228228%>
229229
230230
231231新加一万条记录谁快?第一种方法用31秒,后者直到超时仍未完成。不得已,少掉一个0,1000条是,后者慢一半。
232232<!--#include file="filetou.asp"-->
233233<%
234234   sql ="SELECT 名称  from user where id=0"
235235   Set rs=Server.CreateObject("ADODB.RecordSet")                        
236236   rs.Open sql,conn,1,3
237237dim tttt1,ttt2 
238238
239239ttt1=now()
240240  for i=1 to  10000
241241   rs.addnew
242242   rs("名称")="阿余A"
243243   rs.update
244244next
245245ttt2=now()
246246tou=ttt2-ttt1
247247Response.Write sn&""&tou*24*60*60&":"&session("s"&i-1)&"<br>"
248248
249249
250250ttt1=now()
251251  for i=1 to  10000
252252     sql=" INSERT INTO  user (名称) VALUES('阿余B')"
253253     conn.execute sql,0,-1
254254next
255255ttt2=now()
256256tou=ttt2-ttt1
257257Response.Write sn&""&tou*24*60*60&":"&session("s"&i-1)&"<br>"
258258
259259
260260%>
261261
262262下面的程序结果说明RS新增记录较快,而删除较慢,用CONN新增慢,但删除很快。
263263运行的结果为:
2642643.00000007264316:
2652657.99999998416752:
2662661.99999983888119:
2672670:
268268后来用RS新增记录5000条,并用CONN删除这5000条, 结果为:
26926917.000000202097:
2702701.00000023376197:
271271程序为:
272272<!--#include file="filetou.asp"-->
273273<%
274274dim tttt1,ttt2 
275275ttt1=now()
276276sql ="SELECT 名称  from user where id=0"
277277   Set rs=Server.CreateObject("ADODB.RecordSet")                        
278278   rs.Open sql,conn,1,3
279279  for i=1 to  1000
280280   rs.addnew
281281   rs("名称")="阿余A"
282282   rs.update
283283next
284284ttt2=now()
285285tou=ttt2-ttt1
286286Response.Write sn&""&tou*24*60*60&":"&session("s"&i-1)&"<br>"
287287
288288
289289ttt1=now()
290290  for i=1 to  1000
291291     sql=" INSERT INTO  user (名称) VALUES('阿余B')"
292292     conn.execute sql,0,-1
293293next
294294ttt2=now()
295295tou=ttt2-ttt1
296296Response.Write sn&""&tou*24*60*60&":"&session("s"&i-1)&"<br>"
297297
298298
299299
300300
301301ttt1=now()
302302   sql ="SELECT  名称 from user where 名称='阿余A'"
303303   Set rs=Server.CreateObject("ADODB.RecordSet")                        
304304   rs.Open sql,conn,1,3
305305do while not rs.eof
306306   rs.delete
307307   rs.update
308308   rs.move 0,1
309309  loop
310310ttt2=now()
311311tou=ttt2-ttt1
312312Response.Write sn&""&tou*24*60*60&":"&session("s"&i-1)&"<br>"
313313
314314
315315ttt1=now()
316316   sql ="delete from user  where 名称='阿余B'"
317317    conn.execute sql,0,-1
318318ttt2=now()
319319tou=ttt2-ttt1
320320Response.Write sn&""&tou*24*60*60&":"&session("s"&i-1)&"<br>"
321321%> 
posted on 2005-06-22 09:12  edwin  阅读(1010)  评论(0)    收藏  举报