top
Loading...
一次關于ASP變量和對像關閉與不關閉的差別測試
對于ASP程序,用到的變量有全局變量,以及一些建立的對象。良好的ASP程序員都有釋放它們的習慣,但釋放與不釋
放之間到底有多少差別呢?所以今天特地對它們進行了一翻測試。

測試內容:測試的全局變量有一個,對象是采用連接SQL的connection對象。
第一次測試:不釋放全局變量而結束程序執行。
第二次測試:釋放全局變量而結束程序執行。
測試前準備:在運行測試前等待服務器休息5分鐘,保證內容及CPU已經穩定下來。
測試軟硬件:服務器為平常的PIII550,內存256M。裝有Win2000+IIS5.0+SQL2000
客戶端一臺為Win2000,采用IE5.5,開一個瀏覽窗口
另一客戶端是Win98,IE5.0,開兩個瀏覽窗口

共測試次數:三個客戶端累計執行到20000停止。

第一次測試報告(不釋放):

開始時內存占用:146464K
開始一個客戶端后內存占用:146996K CPU資源占用31-32%
開始兩個客戶端內存占用:147316K CPU資源占用49-52%
后面的內存變化為 -> 147304K -> 147328
開始三個客戶端內存占用:147868K CPU資源占用59-69%
后面的內存變化為 -> 147868K -> 147864K -> 147856K -> 147724K -> 147828K
-> 147860K -> 147868K -> 148084K -> 148076K -> 148088K
-> 148040K -> 147940K
結束時內存占用:147940K
三個客戶端停止請求后內存釋放情況:
147940K -> 148000K -> 147988K -> 146472K -> 146448K -> 146452K



第二次測試報告(釋放):

開始時內存占用:146652K
開始一個客戶端后內存占用:146996K CPU資源占用35-38%
開始兩個客戶端內存占用:147700K CPU資源占用55-62%
開始三個客戶端內存占用:148252K CPU資源占用53-71%
后面的內存變化為 -> 148248K -> 148060K
....
-> 148080K -> 148076K
結束時內存占用:147940K
三個客戶端停止請求后內存釋放情況:
148076K -> 147956K -> .... -> 146452

下面是兩次測試在結束客戶端穩定下來的內存差別:

第一次:146464-146716 = 252K
第二次:146652-146452 = -200K

第一次耗去了內存約252K,最好服務器好像再也釋放不掉了
第二次很奇怪,到最后內存卻節約了200K,不知是什原因。

下面是兩次開始測試和結束測試一瞬時的內存使用情況:

第一次:146464-147940 = 3476K
第二次:146652-148076 = 1324K

內存使用情況第一次比第二次多了將近一倍。

這次測試說明釋放變量還是有益處的,特別是當系統長期運行的,更是要注意釋放變量,放可保證服務器資源不會白
白浪費而到窮盡。

----------------------------------------------------------

附部分測試代碼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 "結束!!已經達到2000次"
Response.end
End If
%>
<!-- #include file=inc/setup.asp -->
<!-- #include file=inc/popu_fun.asp -->
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta http-equiv="refresh" content="0">
</head>

<body bgcolor="#FFFFFF" text="#000000">

</body>
</html>

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

北斗有巢氏 有巢氏北斗