對于asp程序,用到的變量有全局變量,以及一些建立的對象。良好的asp程序員都有釋放它們的習(xí)慣,但釋放與不釋放之間到底有多少差別呢?所以今天特地對它們進(jìn)行了一翻測試。
測試內(nèi)容:測試的全局變量有一個,對象是采用連接sql的connection對象。
第一次測試:不釋放全局變量而結(jié)束程序執(zhí)行。
第二次測試:釋放全局變量而結(jié)束程序執(zhí)行。
測試前準(zhǔn)備:在運(yùn)行測試前等待服務(wù)器休息5分鐘,保證內(nèi)容及cpu已經(jīng)穩(wěn)定下來。
測試軟硬件:服務(wù)器為平常的piii550,內(nèi)存256m。裝有win2000+iis5.0+sql2000
客戶端一臺為win2000,采用ie5.5,開一個瀏覽窗口
另一客戶端是win98,ie5.0,開兩個瀏覽窗口
共測試次數(shù):三個客戶端累計(jì)執(zhí)行到20000停止。
第一次測試報(bào)告(不釋放):
開始時(shí)內(nèi)存占用:146464k
開始一個客戶端后內(nèi)存占用:146996k cpu資源占用31-32%
開始兩個客戶端內(nèi)存占用:147316k cpu資源占用49-52%
后面的內(nèi)存變化為 -> 147304k -> 147328
開始三個客戶端內(nèi)存占用:147868k cpu資源占用59-69%
后面的內(nèi)存變化為 -> 147868k -> 147864k -> 147856k -> 147724k -> 147828k
-> 147860k -> 147868k -> 148084k -> 148076k -> 148088k
-> 148040k -> 147940k
結(jié)束時(shí)內(nèi)存占用:147940k
三個客戶端停止請求后內(nèi)存釋放情況:
147940k -> 148000k -> 147988k -> 146472k -> 146448k -> 146452k
第二次測試報(bào)告(釋放):
開始時(shí)內(nèi)存占用:146652k
開始一個客戶端后內(nèi)存占用:146996k cpu資源占用35-38%
開始兩個客戶端內(nèi)存占用:147700k cpu資源占用55-62%
開始三個客戶端內(nèi)存占用:148252k cpu資源占用53-71%
后面的內(nèi)存變化為 -> 148248k -> 148060k
....
-> 148080k -> 148076k
結(jié)束時(shí)內(nèi)存占用:147940k
三個客戶端停止請求后內(nèi)存釋放情況:
148076k -> 147956k -> .... -> 146452
下面是兩次測試在結(jié)束客戶端穩(wěn)定下來的內(nèi)存差別:
第一次:146464-146716 = 252k
第二次:146652-146452 = -200k
第一次耗去了內(nèi)存約252k,最好服務(wù)器好像再也釋放不掉了
第二次很奇怪,到最后內(nèi)存卻節(jié)約了200k,不知是什原因。
下面是兩次開始測試和結(jié)束測試一瞬時(shí)的內(nèi)存使用情況:
第一次:146464-147940 = 3476k
第二次:146652-148076 = 1324k
內(nèi)存使用情況第一次比第二次多了將近一倍。
這次測試說明釋放變量還是有益處的,特別是當(dāng)系統(tǒng)長期運(yùn)行的,更是要注意釋放變量,放可保證服務(wù)器資源不會白
白浪費(fèi)而到窮盡。
----------------------------------------------------------
附部分測試代碼test.asp:
<%option explicit
if request("qian")="qian" then
application("testnumer") =0
response.write "重置為0!"
response.end
end if
if application("testnumer") > 20000 then
response.write "結(jié)束!!已經(jīng)達(dá)到2000次"
response.end
end if
%>
untitled document
<%dim yp
application("testnumer") = application("testnumer") + 1
response.write "testnumer: " & application("testnumer")
initdatabase("yp")
initdatabase("yp")
initdatabase("yp")
initdatabase("yp")
yp=second(time)
set yp=nothing
closedatabase%>
該文章在 2010/7/24 16:53:48 編輯過