1
1程序运行速度试验结果:
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()
100
100 i=0
101
101 do while i<=100000
102
102 i=i+1
103
103 loop
104
104ttt2=now()
105
105tou=ttt2-ttt1
106
106Response.Write sn&"、"&tou*24*60*60&"<br>"
107
107next
108
108
109
109for sn=0 to 5
110
110ttt1=now()
111
111 ii=0
112
112 for i=0 to 100000
113
113 ii=ii+1
114
114 next
115
115ttt2=now()
116
116tou=ttt2-ttt1
117
117Response.Write sn&"、"&tou*24*60*60&"<br>"
118
118next
119
119%>
120
120定义5000个一个字符的SESSION并不比定义5000个有5000个字符串长的SESSION少花很多时间,两者时间差仅为近一倍,用一秒多钟。倒是生成这个5000个字符长的变量花了不少的时间,<%
121
121dim tttt1,ttt2
122
122c="a"
123
123for sn=0 to 5
124
124
125
125session.abandon
126
126ttt1=now()
127
127 for i=0 to 5000
128
128 session("s"&i)=c
129
129 next
130
130ttt2=now()
131
131tou=ttt2-ttt1
132
132Response.Write sn&"、"&tou*24*60*60&":"&session("s"&i-1)&"<br>"
133
133next
134
134
135
135for i=0 to 5000
136
136 c="a"&c
137
137next
138
138
139
139for sn=0 to 5
140
140session.abandon
141
141ttt1=now()
142
142 for i=0 to 5000
143
143 session("s"&i)=c
144
144 next
145
145ttt2=now()
146
146tou=ttt2-ttt1
147
147Response.Write sn&"、"&tou*24*60*60&":" &session("s"&i-1)&"<br>"
148
148next
149
149
150
150
151
151%>
152
152
153
153
154
154这段程序从SN=3起就很慢,而前面非常快
155
155<!--#include file="filetou.asp"-->
156
156<%
157
157dim tttt1,ttt2
158
158for sn=0 to 5
159
159ttt1=now()
160
160 for i=1 to 20
161
161 sql ="SELECT 名称 from user where 名称='阿余'"
162
162 Set rs=Server.CreateObject("ADODB.RecordSet")
163
163 rs.Open sql,conn,1,3
164
164 rs("名称")="阿余"
165
165 rs.update
166
166 rs.close
167
167next
168
168ttt2=now()
169
169tou=ttt2-ttt1
170
170Response.Write sn&"、"&tou*24*60*60&":"&session("s"&i-1)&"<br>"
171
171next
172
172
173
173
174
174%>
175
175
176
176
177
177而这样就快多了。看来建对象很要花些时间,还有,用MOVE 0,1 和 MOVEFIRST 相比速度没有什么差别。
178
178<!--#include file="filetou.asp"-->
179
179<%
180
180 sql ="SELECT 名称 from user where 名称='阿余'"
181
181 Set rs=Server.CreateObject("ADODB.RecordSet")
182
182 rs.Open sql,conn,1,3
183
183dim tttt1,ttt2
184
184for sn=0 to 5
185
185ttt1=now()
186
186 for i=1 to 700
187
187 rs("名称")="阿余"
188
188 rs.update
189
189 rs.movefirst
190
190next
191
191ttt2=now()
192
192tou=ttt2-ttt1
193
193Response.Write sn&"、"&tou*24*60*60&":"&session("s"&i-1)&"<br>"
194
194next
195
195%>
196
196
197
197而这两种方式相比,后者要慢3倍,可能是后者要重新查询,但比前面的用RS建查询后又去改,改了又关,相比,要快了不知多少。
198
198<!--#include file="filetou.asp"-->
199
199<%
200
200 sql ="SELECT 名称 from user where 名称='阿余'"
201
201 Set rs=Server.CreateObject("ADODB.RecordSet")
202
202 rs.Open sql,conn,1,3
203
203dim tttt1,ttt2
204
204
205
205for sn=0 to 5
206
206ttt1=now()
207
207 for i=1 to 700
208
208 rs("名称")="阿余"
209
209 rs.update
210
210 rs.movefirst
211
211next
212
212ttt2=now()
213
213tou=ttt2-ttt1
214
214Response.Write sn&"、"&tou*24*60*60&":"&session("s"&i-1)&"<br>"
215
215next
216
216
217
217for sn=0 to 5
218
218ttt1=now()
219
219 for i=1 to 700
220
220 SQL="UPDATE user set 名称='阿余' where 名称='阿余'"
221
221 conn.execute sql,0,-1
222
222next
223
223ttt2=now()
224
224tou=ttt2-ttt1
225
225Response.Write sn&"、"&tou*24*60*60&":"&session("s"&i-1)&"<br>"
226
226next
227
227
228
228%>
229
229
230
230
231
231新加一万条记录谁快?第一种方法用31秒,后者直到超时仍未完成。不得已,少掉一个0,1000条是,后者慢一半。
232
232<!--#include file="filetou.asp"-->
233
233<%
234
234 sql ="SELECT 名称 from user where id=0"
235
235 Set rs=Server.CreateObject("ADODB.RecordSet")
236
236 rs.Open sql,conn,1,3
237
237dim tttt1,ttt2
238
238
239
239ttt1=now()
240
240 for i=1 to 10000
241
241 rs.addnew
242
242 rs("名称")="阿余A"
243
243 rs.update
244
244next
245
245ttt2=now()
246
246tou=ttt2-ttt1
247
247Response.Write sn&"、"&tou*24*60*60&":"&session("s"&i-1)&"<br>"
248
248
249
249
250
250ttt1=now()
251
251 for i=1 to 10000
252
252 sql=" INSERT INTO user (名称) VALUES('阿余B')"
253
253 conn.execute sql,0,-1
254
254next
255
255ttt2=now()
256
256tou=ttt2-ttt1
257
257Response.Write sn&"、"&tou*24*60*60&":"&session("s"&i-1)&"<br>"
258
258
259
259
260
260%>
261
261
262
262下面的程序结果说明RS新增记录较快,而删除较慢,用CONN新增慢,但删除很快。
263
263运行的结果为:
264
264、3.00000007264316:
265
265、7.99999998416752:
266
266、1.99999983888119:
267
267、0:
268
268后来用RS新增记录5000条,并用CONN删除这5000条, 结果为:
269
269、17.000000202097:
270
270、1.00000023376197:
271
271程序为:
272
272<!--#include file="filetou.asp"-->
273
273<%
274
274dim tttt1,ttt2
275
275ttt1=now()
276
276sql ="SELECT 名称 from user where id=0"
277
277 Set rs=Server.CreateObject("ADODB.RecordSet")
278
278 rs.Open sql,conn,1,3
279
279 for i=1 to 1000
280
280 rs.addnew
281
281 rs("名称")="阿余A"
282
282 rs.update
283
283next
284
284ttt2=now()
285
285tou=ttt2-ttt1
286
286Response.Write sn&"、"&tou*24*60*60&":"&session("s"&i-1)&"<br>"
287
287
288
288
289
289ttt1=now()
290
290 for i=1 to 1000
291
291 sql=" INSERT INTO user (名称) VALUES('阿余B')"
292
292 conn.execute sql,0,-1
293
293next
294
294ttt2=now()
295
295tou=ttt2-ttt1
296
296Response.Write sn&"、"&tou*24*60*60&":"&session("s"&i-1)&"<br>"
297
297
298
298
299
299
300
300
301
301ttt1=now()
302
302 sql ="SELECT 名称 from user where 名称='阿余A'"
303
303 Set rs=Server.CreateObject("ADODB.RecordSet")
304
304 rs.Open sql,conn,1,3
305
305do while not rs.eof
306
306 rs.delete
307
307 rs.update
308
308 rs.move 0,1
309
309 loop
310
310ttt2=now()
311
311tou=ttt2-ttt1
312
312Response.Write sn&"、"&tou*24*60*60&":"&session("s"&i-1)&"<br>"
313
313
314
314
315
315ttt1=now()
316
316 sql ="delete from user where 名称='阿余B'"
317
317 conn.execute sql,0,-1
318
318ttt2=now()
319
319tou=ttt2-ttt1
320
320Response.Write sn&"、"&tou*24*60*60&":"&session("s"&i-1)&"<br>"
321
321%>
1程序运行速度试验结果:2
21。作相同的分支条件判断:IF 比 SELECT慢。3
3用以下程序测试:4
4<%5
5dim tttt1,ttt26
6session("ii")=07
7for sn=0 to 58
8ttt1=now()9
9for i=0 to 30000010
10 if session("ii")=0 then11
11 session("ii")=112
12 else13
13 if session("ii")=1 then14
14 session("ii")=215
15 else16
16 if session("ii")=2 then17
17 session("ii")=318
18 else19
19 session("ii")=020
20 end if21
21 end if22
22 end if23
23next24
24ttt2=now()25
25tou=ttt2-ttt126
26Response.Write sn&"、"&tou*24*60*60&"<br>"27
27next28
2829
29for sn=0 to 530
30ttt1=now()31
31for i=0 to 30000032
32 select case session("ii")33
33 case 034
34 session("ii")=135
35 case 136
36 session("ii")=237
37 case 238
38 session("ii")=339
39 case 340
40 session("ii")=041
41 end select42
42next43
43ttt2=now()44
44tou=ttt2-ttt145
45Response.Write sn&"、"&tou*24*60*60&"<br>"46
46next47
4748
48%>49
492, 如果把上例中的SESSION对象改为用普通的变量存。速度会快差不多8倍50
503,进行字符串连接时往中间加入相同多的字符串,基数越大,越慢。51
51通过下面的程序测试:52
52<%53
53dim tttt1,ttt254
54session("ii")=055
55for sn=0 to 556
56ttt1=now()57
57' txt=""58
58 for i=0 to 1000059
59 txt="a"&txt60
60 next61
61ttt2=now()62
62tou=ttt2-ttt163
63Response.Write sn&"、"&tou*24*60*60&"<br>"64
64next65
65%>66
66进行同样长字节的字符连接时,汉字比英文快4倍,通过下面的程序测试67
67<%68
6869
69dim tttt1,ttt270
70for sn=0 to 571
71ttt1=now()72
72 txt=""73
73 for i=0 to 2000074
74 txt="人"&txt75
75 next76
76ttt2=now()77
77tou=ttt2-ttt178
78Response.Write sn&"、"&tou*24*60*60&"<br>"79
79next80
8081
81txt=""82
82for sn=0 to 583
83ttt1=now()84
84 txt=""85
85 for i=0 to 2000086
86 txt="aa"&txt87
87 next88
88ttt2=now()89
89tou=ttt2-ttt190
90Response.Write sn&"、"&tou*24*60*60&"<br>"91
91next92
9293
93%>94
94用FOR 循环比DO WHILE循环要快得多,用下面的程序测试,虽然FOR循环中要多一个变量,95
95<%96
96dim tttt1,ttt297
9798
98for sn=0 to 599
99ttt1=now()100
100 i=0101
101 do while i<=100000102
102 i=i+1103
103 loop104
104ttt2=now()105
105tou=ttt2-ttt1106
106Response.Write sn&"、"&tou*24*60*60&"<br>"107
107next108
108109
109for sn=0 to 5110
110ttt1=now()111
111 ii=0112
112 for i=0 to 100000113
113 ii=ii+1114
114 next115
115ttt2=now()116
116tou=ttt2-ttt1117
117Response.Write sn&"、"&tou*24*60*60&"<br>"118
118next119
119%>120
120定义5000个一个字符的SESSION并不比定义5000个有5000个字符串长的SESSION少花很多时间,两者时间差仅为近一倍,用一秒多钟。倒是生成这个5000个字符长的变量花了不少的时间,<%121
121dim tttt1,ttt2122
122c="a"123
123for sn=0 to 5124
124125
125session.abandon126
126ttt1=now()127
127 for i=0 to 5000128
128 session("s"&i)=c129
129 next130
130ttt2=now()131
131tou=ttt2-ttt1132
132Response.Write sn&"、"&tou*24*60*60&":"&session("s"&i-1)&"<br>"133
133next134
134135
135for i=0 to 5000136
136 c="a"&c137
137next138
138139
139for sn=0 to 5140
140session.abandon141
141ttt1=now()142
142 for i=0 to 5000143
143 session("s"&i)=c144
144 next145
145ttt2=now()146
146tou=ttt2-ttt1147
147Response.Write sn&"、"&tou*24*60*60&":" &session("s"&i-1)&"<br>"148
148next149
149150
150151
151%>152
152153
153154
154这段程序从SN=3起就很慢,而前面非常快155
155<!--#include file="filetou.asp"-->156
156<%157
157dim tttt1,ttt2158
158for sn=0 to 5159
159ttt1=now()160
160 for i=1 to 20161
161 sql ="SELECT 名称 from user where 名称='阿余'"162
162 Set rs=Server.CreateObject("ADODB.RecordSet") 163
163 rs.Open sql,conn,1,3164
164 rs("名称")="阿余"165
165 rs.update166
166 rs.close167
167next168
168ttt2=now()169
169tou=ttt2-ttt1170
170Response.Write sn&"、"&tou*24*60*60&":"&session("s"&i-1)&"<br>"171
171next172
172173
173174
174%>175
175176
176177
177而这样就快多了。看来建对象很要花些时间,还有,用MOVE 0,1 和 MOVEFIRST 相比速度没有什么差别。178
178<!--#include file="filetou.asp"-->179
179<%180
180 sql ="SELECT 名称 from user where 名称='阿余'"181
181 Set rs=Server.CreateObject("ADODB.RecordSet") 182
182 rs.Open sql,conn,1,3183
183dim tttt1,ttt2 184
184for sn=0 to 5185
185ttt1=now()186
186 for i=1 to 700187
187 rs("名称")="阿余"188
188 rs.update189
189 rs.movefirst190
190next191
191ttt2=now()192
192tou=ttt2-ttt1193
193Response.Write sn&"、"&tou*24*60*60&":"&session("s"&i-1)&"<br>"194
194next195
195%>196
196197
197而这两种方式相比,后者要慢3倍,可能是后者要重新查询,但比前面的用RS建查询后又去改,改了又关,相比,要快了不知多少。198
198<!--#include file="filetou.asp"-->199
199<%200
200 sql ="SELECT 名称 from user where 名称='阿余'"201
201 Set rs=Server.CreateObject("ADODB.RecordSet") 202
202 rs.Open sql,conn,1,3203
203dim tttt1,ttt2 204
204205
205for sn=0 to 5206
206ttt1=now()207
207 for i=1 to 700208
208 rs("名称")="阿余"209
209 rs.update210
210 rs.movefirst211
211next212
212ttt2=now()213
213tou=ttt2-ttt1214
214Response.Write sn&"、"&tou*24*60*60&":"&session("s"&i-1)&"<br>"215
215next216
216217
217for sn=0 to 5218
218ttt1=now()219
219 for i=1 to 700220
220 SQL="UPDATE user set 名称='阿余' where 名称='阿余'"221
221 conn.execute sql,0,-1222
222next223
223ttt2=now()224
224tou=ttt2-ttt1225
225Response.Write sn&"、"&tou*24*60*60&":"&session("s"&i-1)&"<br>"226
226next227
227228
228%>229
229230
230231
231新加一万条记录谁快?第一种方法用31秒,后者直到超时仍未完成。不得已,少掉一个0,1000条是,后者慢一半。232
232<!--#include file="filetou.asp"-->233
233<%234
234 sql ="SELECT 名称 from user where id=0"235
235 Set rs=Server.CreateObject("ADODB.RecordSet") 236
236 rs.Open sql,conn,1,3237
237dim tttt1,ttt2 238
238239
239ttt1=now()240
240 for i=1 to 10000241
241 rs.addnew242
242 rs("名称")="阿余A"243
243 rs.update244
244next245
245ttt2=now()246
246tou=ttt2-ttt1247
247Response.Write sn&"、"&tou*24*60*60&":"&session("s"&i-1)&"<br>"248
248249
249250
250ttt1=now()251
251 for i=1 to 10000252
252 sql=" INSERT INTO user (名称) VALUES('阿余B')"253
253 conn.execute sql,0,-1254
254next255
255ttt2=now()256
256tou=ttt2-ttt1257
257Response.Write sn&"、"&tou*24*60*60&":"&session("s"&i-1)&"<br>"258
258259
259260
260%>261
261262
262下面的程序结果说明RS新增记录较快,而删除较慢,用CONN新增慢,但删除很快。263
263运行的结果为:264
264、3.00000007264316:265
265、7.99999998416752:266
266、1.99999983888119:267
267、0:268
268后来用RS新增记录5000条,并用CONN删除这5000条, 结果为:269
269、17.000000202097:270
270、1.00000023376197:271
271程序为:272
272<!--#include file="filetou.asp"-->273
273<%274
274dim tttt1,ttt2 275
275ttt1=now()276
276sql ="SELECT 名称 from user where id=0"277
277 Set rs=Server.CreateObject("ADODB.RecordSet") 278
278 rs.Open sql,conn,1,3279
279 for i=1 to 1000280
280 rs.addnew281
281 rs("名称")="阿余A"282
282 rs.update283
283next284
284ttt2=now()285
285tou=ttt2-ttt1286
286Response.Write sn&"、"&tou*24*60*60&":"&session("s"&i-1)&"<br>"287
287288
288289
289ttt1=now()290
290 for i=1 to 1000291
291 sql=" INSERT INTO user (名称) VALUES('阿余B')"292
292 conn.execute sql,0,-1293
293next294
294ttt2=now()295
295tou=ttt2-ttt1296
296Response.Write sn&"、"&tou*24*60*60&":"&session("s"&i-1)&"<br>"297
297298
298299
299300
300301
301ttt1=now()302
302 sql ="SELECT 名称 from user where 名称='阿余A'"303
303 Set rs=Server.CreateObject("ADODB.RecordSet") 304
304 rs.Open sql,conn,1,3305
305do while not rs.eof306
306 rs.delete307
307 rs.update308
308 rs.move 0,1309
309 loop310
310ttt2=now()311
311tou=ttt2-ttt1312
312Response.Write sn&"、"&tou*24*60*60&":"&session("s"&i-1)&"<br>"313
313314
314315
315ttt1=now()316
316 sql ="delete from user where 名称='阿余B'"317
317 conn.execute sql,0,-1318
318ttt2=now()319
319tou=ttt2-ttt1320
320Response.Write sn&"、"&tou*24*60*60&":"&session("s"&i-1)&"<br>"321
321%>
浙公网安备 33010602011771号