明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

一份ASP內(nèi)存的釋放的實(shí)驗(yàn)報(bào)告

[摘要]實(shí)驗(yàn)?zāi)康?驗(yàn)證主動(dòng)釋放內(nèi)存變量是否有價(jià)值. 實(shí)驗(yàn)原始代碼: <script language=vbscript runat=server> Dim temp1,temp2 'temp1 = space(1024*1024*50) '50MB for i = 0 to 5...

實(shí)驗(yàn)?zāi)康?驗(yàn)證主動(dòng)釋放內(nèi)存變量是否有價(jià)值.

實(shí)驗(yàn)原始代碼:

<script language=vbscript runat=server>
Dim temp1,temp2

'temp1 = space(1024*1024*50) '50MB

for i = 0 to 5000000 ' 延遲
next


'temp1="" '開關(guān)變量

'temp2 = space(1024*1024*50) '50MB

for i = 0 to 5000000 ' 延遲
next

Response.write "<meta http-equiv='refresh' content='4;url=http://localhost/memory_test.ASP'>"
</script>

內(nèi)存變化截圖1:


截圖解釋:
CPU的波形變化是由頁面自動(dòng)刷新引起的,不必在意!我們要觀察的只是內(nèi)存線的變化.這是原始狀態(tài),內(nèi)存線保持水平無變化.

好,下面實(shí)驗(yàn)正式開始:

第一步:

把原始代碼中的
'temp1 = space(1024*1024*50) '50MB
前面的注釋號(hào) ' 去掉,改成
temp1 = space(1024*1024*50) '50MB

再觀察內(nèi)存變化一段時(shí)間

內(nèi)存變化截圖2:


結(jié)果:
內(nèi)存開始出現(xiàn)方波.

第二步:

接著也把
'temp2 = space(1024*1024*50) '50MB
前面的注釋號(hào) ' 去掉,改成
temp2 = space(1024*1024*50) '50MB

內(nèi)存變化截圖3:


結(jié)果:

方波比原來高了一層,成了階梯形.



第三步:

接著也把
'temp1="" '開關(guān)變量
前面的注釋號(hào) ' 去掉,改成
temp1="" '開關(guān)變量

看看是否能釋放第一個(gè)變量所占用的內(nèi)存空間

內(nèi)存變化截圖4:


結(jié)果:
很明顯,第二個(gè)波鋒不見了,看來釋放成功了.

第四步:

我們先把代碼恢復(fù)成最初的原始代碼,等內(nèi)存平穩(wěn)下來后,再把前三步快速做一次,以便在同一個(gè)截圖里比較內(nèi)存的變化情況.

內(nèi)存變化截圖5:


結(jié)果:
可以很清楚的看到三種情況的不同.無倫執(zhí)行時(shí)間和內(nèi)存占用,變量主動(dòng)釋放都比不被動(dòng)釋放的好.



第五步:

接著第三步的代碼,把
temp1="" '開關(guān)變量

temp2 = space(1024*1024*50) '50MB
改成
'temp1="" '開關(guān)變量

temp1 = space(1024*1024*50) '50MB

內(nèi)存變化截圖6:


結(jié)果:
再看下步才給結(jié)論吧

第六步:


'temp1="" '開關(guān)變量

改成
temp1="" '開關(guān)變量


看看結(jié)果會(huì)不會(huì)有所不同

內(nèi)存變化截圖7:


結(jié)果:
用同一個(gè)變量名,即使再重新賦值,原來的占用過的空間也得不到釋放或替換,而且等程序被動(dòng)釋放時(shí),使用的時(shí)間也比手動(dòng)的慢.

下面把
temp1="" '開關(guān)變量

temp1 = space(1024*1024*50) '50MB

調(diào)換一下兩句的位置
temp1 = space(1024*1024*50) '50MB

temp1="" '開關(guān)變量

后的截圖8:


結(jié)果:
可以看出主動(dòng)釋放比被動(dòng)的所需要的時(shí)間要少.

實(shí)驗(yàn)結(jié)論:
主動(dòng)來釋放內(nèi)存是有作用的,不是某些人所說的要等頁面結(jié)束才能釋放掉,或者只是呆等程序結(jié)束再自動(dòng)釋放,而是在執(zhí)行過程中也可以人為控制的.特別是程序中需要調(diào)用到幾個(gè)大體積的變量時(shí),盡快釋放掉已無用的變量,不但可以減輕服務(wù)器的負(fù)擔(dān),也可以加快程序的運(yùn)行.
如果發(fā)現(xiàn)此實(shí)驗(yàn)過程或結(jié)論有誤,歡迎指正.

最后,關(guān)于用"" ,empty 或 null 來釋放,結(jié)果基本是一樣,有興趣的可以自己親自動(dòng)手比較試試.至于說用哪個(gè)來釋放變量更正規(guī)或更有效率,我無法在次實(shí)驗(yàn)中判斷出來,希望知道的朋友來指教.



附:另外一個(gè)不大相關(guān)實(shí)驗(yàn)

<% %>內(nèi)是否有內(nèi)容的區(qū)別(包括注釋)

實(shí)驗(yàn)代碼:

<meta http-equiv='refresh' content='4;url=http://localhost/memory_test.ASP'>
<script language=vbscript runat=server>
Dim temp1,temp2

temp1 = space(1024*1024*50) '50MB

for i = 0 to 5000000 ' 延遲
next

'temp1="" '開關(guān)變量

'temp2 = space(1024*1024*50) '50MB

for i = 0 to 5000000 ' 延遲
next


</script>
<%
'
%>



實(shí)驗(yàn)結(jié)果:

1.<% %>內(nèi)無內(nèi)容,內(nèi)存不變化

2.<% %>只有一個(gè) ' 號(hào),內(nèi)存開始變化

改變前后對(duì)比圖9:



結(jié)果:
<% 與 <script language=vbscript runat=server> 的先后位置無關(guān),但似乎只要 <% %> 內(nèi)有內(nèi)容,就會(huì)執(zhí)行 <script language=vbscript runat=server></script> 內(nèi)的代碼.但只要把<script language=vbscript runat=server></script> 替換成 <% %>,就會(huì)執(zhí)行<% %>內(nèi)的代碼,所以以后要注意兩者的混用.

還有,在<script language=vbscript>中的這種頁面腳本,除非頁面被關(guān)掉,否則所用過的變量不會(huì)像ASP一樣自動(dòng)清除.可以從下面的代碼得到證實(shí):

<script language=vbscript>
Dim temp
temp = space(1024*1024*50) '50MB
'temp = ""
</script>

注意去掉注釋號(hào)前后的內(nèi)存的占用變化,不再截圖說明.
(出處:Viphot)