一份ASP內(nèi)存的釋放的實(shí)驗(yàn)報(bào)告
更新時(shí)間:2006年12月17日 00:00:00 作者:
實(shí)驗(yàn)?zāi)康?驗(yàn)證主動(dòng)釋放內(nèi)存變量是否有價(jià)值.
實(shí)驗(yàn)原始代碼:
內(nèi)存變化截圖1:

截圖解釋?zhuān)篊PU的波形變化是由頁(yè)面自動(dòng)刷新引起的,不必在意!我們要觀(guān)察的只是內(nèi)存線(xiàn)的變化。這是原始狀態(tài),內(nèi)存線(xiàn)保持水平無(wú)變化。
好,下面實(shí)驗(yàn)正式開(kāi)始:
第一步:
把原始代碼中的
'temp1 = space(1024*1024*50) '50MB
前面的注釋號(hào) ' 去掉,改成
temp1 = space(1024*1024*50) '50MB
再觀(guān)察內(nèi)存變化一段時(shí)間
內(nèi)存變化截圖2:

結(jié)果:內(nèi)存開(kāi)始出現(xiàn)方波。
第二步:
接著也把
'temp2 = space(1024*1024*50) '50MB
前面的注釋號(hào) ' 去掉,改成
temp2 = space(1024*1024*50) '50MB
內(nèi)存變化截圖3:

結(jié)果:方波比原來(lái)高了一層,成了階梯形。
第三步:
接著也把
'temp1="" '開(kāi)關(guān)變量
前面的注釋號(hào) ' 去掉,改成
temp1="" '開(kāi)關(guān)變量
看看是否能釋放第一個(gè)變量所占用的內(nèi)存空間
內(nèi)存變化截圖4:

結(jié)果:很明顯,第二個(gè)波鋒不見(jiàn)了,看來(lái)釋放成功了。
第四步:
我們先把代碼恢復(fù)成最初的原始代碼,等內(nèi)存平穩(wěn)下來(lái)后,再把前三步快速做一次,以便在同一個(gè)截圖里比較內(nèi)存的變化情況。
內(nèi)存變化截圖5:

結(jié)果:可以很清楚的看到三種情況的不同。無(wú)倫執(zhí)行時(shí)間和內(nèi)存占用,變量主動(dòng)釋放都比不被動(dòng)釋放的好。
第五步:
接著第三步的代碼,把
temp1="" '開(kāi)關(guān)變量
temp2 = space(1024*1024*50) '50MB
改成
'temp1="" '開(kāi)關(guān)變量
temp1 = space(1024*1024*50) '50MB
內(nèi)存變化截圖6:

結(jié)果:再看下步才給結(jié)論吧
第六步:
把
'temp1="" '開(kāi)關(guān)變量
改成
temp1="" '開(kāi)關(guān)變量
看看結(jié)果會(huì)不會(huì)有所不同
內(nèi)存變化截圖7:

結(jié)果:用同一個(gè)變量名,即使再重新賦值,原來(lái)的占用過(guò)的空間也得不到釋放或替換(截圖6說(shuō)明),而且等程序被動(dòng)釋放時(shí),使用的時(shí)間也比手動(dòng)的慢(綜合截圖6、7說(shuō)明)。
下面把
temp1="" '開(kāi)關(guān)變量
temp1 = space(1024*1024*50) '50MB
調(diào)換一下兩句的位置
temp1 = space(1024*1024*50) '50MB
temp1="" '開(kāi)關(guān)變量
后的截圖8:

結(jié)果:可以看出主動(dòng)釋放比被動(dòng)的所需要的時(shí)間要少(波峰尖)
實(shí)驗(yàn)結(jié)論:
主動(dòng)來(lái)釋放內(nèi)存是有作用的,不是某些人所說(shuō)的要等頁(yè)面結(jié)束才能釋放掉,或者只是呆等程序結(jié)束再自動(dòng)釋放,而是在執(zhí)行過(guò)程中也可以人為控制的。特別是程序中需要調(diào)用到幾個(gè)大體積的變量時(shí),盡快釋放掉已無(wú)用的變量,不但可以減輕服務(wù)器的負(fù)擔(dān),也可以加快程序的運(yùn)行。
如果發(fā)現(xiàn)此實(shí)驗(yàn)過(guò)程或結(jié)論有誤,歡迎指正。
最后,關(guān)于用"",empty 或 null 來(lái)釋放,結(jié)果基本是一樣,有興趣的可以自己親自動(dòng)手比較試試。至于說(shuō)用哪個(gè)來(lái)釋放變量更正規(guī)或更有效率,我無(wú)法在此實(shí)驗(yàn)中判斷出來(lái),希望知道的朋友來(lái)指教。
(出處:Viphot)
實(shí)驗(yàn)原始代碼:
<script language=vbscript runat=server> Dim temp1,temp2 'temp1 = space(1024*1024*50) '50MB for i = 0 to 5000000 ' 延遲 next 'temp1="" '開(kāi)關(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:

截圖解釋?zhuān)篊PU的波形變化是由頁(yè)面自動(dòng)刷新引起的,不必在意!我們要觀(guān)察的只是內(nèi)存線(xiàn)的變化。這是原始狀態(tài),內(nèi)存線(xiàn)保持水平無(wú)變化。
好,下面實(shí)驗(yàn)正式開(kāi)始:
第一步:
把原始代碼中的
'temp1 = space(1024*1024*50) '50MB
前面的注釋號(hào) ' 去掉,改成
temp1 = space(1024*1024*50) '50MB
<script language=vbscript runat=server> Dim temp1,temp2 temp1 = space(1024*1024*50) '50MB for i = 0 to 5000000 ' 延遲 next 'temp1="" '開(kāi)關(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> |
再觀(guān)察內(nèi)存變化一段時(shí)間
內(nèi)存變化截圖2:

結(jié)果:內(nèi)存開(kāi)始出現(xiàn)方波。
第二步:
接著也把
'temp2 = space(1024*1024*50) '50MB
前面的注釋號(hào) ' 去掉,改成
temp2 = space(1024*1024*50) '50MB
<script language=vbscript runat=server> Dim temp1,temp2 temp1 = space(1024*1024*50) '50MB for i = 0 to 5000000 ' 延遲 next 'temp1="" '開(kāi)關(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)存變化截圖3:

結(jié)果:方波比原來(lái)高了一層,成了階梯形。
第三步:
接著也把
'temp1="" '開(kāi)關(guān)變量
前面的注釋號(hào) ' 去掉,改成
temp1="" '開(kāi)關(guān)變量
<script language=vbscript runat=server> Dim temp1,temp2 temp1 = space(1024*1024*50) '50MB for i = 0 to 5000000 ' 延遲 next temp1="" '開(kāi)關(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> |
看看是否能釋放第一個(gè)變量所占用的內(nèi)存空間
內(nèi)存變化截圖4:

結(jié)果:很明顯,第二個(gè)波鋒不見(jiàn)了,看來(lái)釋放成功了。
第四步:
我們先把代碼恢復(fù)成最初的原始代碼,等內(nèi)存平穩(wěn)下來(lái)后,再把前三步快速做一次,以便在同一個(gè)截圖里比較內(nèi)存的變化情況。
內(nèi)存變化截圖5:

結(jié)果:可以很清楚的看到三種情況的不同。無(wú)倫執(zhí)行時(shí)間和內(nèi)存占用,變量主動(dòng)釋放都比不被動(dòng)釋放的好。
第五步:
接著第三步的代碼,把
temp1="" '開(kāi)關(guān)變量
temp2 = space(1024*1024*50) '50MB
改成
'temp1="" '開(kāi)關(guān)變量
temp1 = space(1024*1024*50) '50MB
<script language=vbscript runat=server> Dim temp1,temp2 temp1 = space(1024*1024*50) '50MB for i = 0 to 5000000 ' 延遲 next 'temp1="" '開(kāi)關(guān)變量 temp1 = 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)存變化截圖6:

結(jié)果:再看下步才給結(jié)論吧
第六步:
把
'temp1="" '開(kāi)關(guān)變量
改成
temp1="" '開(kāi)關(guān)變量
<script language=vbscript runat=server> Dim temp1,temp2 temp1 = space(1024*1024*50) '50MB for i = 0 to 5000000 ' 延遲 next temp1="" '開(kāi)關(guān)變量 temp1 = 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> |
看看結(jié)果會(huì)不會(huì)有所不同
內(nèi)存變化截圖7:

結(jié)果:用同一個(gè)變量名,即使再重新賦值,原來(lái)的占用過(guò)的空間也得不到釋放或替換(截圖6說(shuō)明),而且等程序被動(dòng)釋放時(shí),使用的時(shí)間也比手動(dòng)的慢(綜合截圖6、7說(shuō)明)。
下面把
temp1="" '開(kāi)關(guān)變量
temp1 = space(1024*1024*50) '50MB
調(diào)換一下兩句的位置
temp1 = space(1024*1024*50) '50MB
temp1="" '開(kāi)關(guān)變量
<script language=vbscript runat=server> Dim temp1,temp2 temp1 = space(1024*1024*50) '50MB for i = 0 to 5000000 ' 延遲 next temp1 = space(1024*1024*50) '50MB temp1="" '開(kāi)關(guān)變量 for i = 0 to 5000000 ' 延遲 next Response.write "<meta http-equiv='refresh' content='4;url=http://localhost/memory_test.ASP'>" </script> |
后的截圖8:

結(jié)果:可以看出主動(dòng)釋放比被動(dòng)的所需要的時(shí)間要少(波峰尖)
實(shí)驗(yàn)結(jié)論:
主動(dòng)來(lái)釋放內(nèi)存是有作用的,不是某些人所說(shuō)的要等頁(yè)面結(jié)束才能釋放掉,或者只是呆等程序結(jié)束再自動(dòng)釋放,而是在執(zhí)行過(guò)程中也可以人為控制的。特別是程序中需要調(diào)用到幾個(gè)大體積的變量時(shí),盡快釋放掉已無(wú)用的變量,不但可以減輕服務(wù)器的負(fù)擔(dān),也可以加快程序的運(yùn)行。
如果發(fā)現(xiàn)此實(shí)驗(yàn)過(guò)程或結(jié)論有誤,歡迎指正。
最后,關(guān)于用"",empty 或 null 來(lái)釋放,結(jié)果基本是一樣,有興趣的可以自己親自動(dòng)手比較試試。至于說(shuō)用哪個(gè)來(lái)釋放變量更正規(guī)或更有效率,我無(wú)法在此實(shí)驗(yàn)中判斷出來(lái),希望知道的朋友來(lái)指教。
(出處:Viphot)
相關(guān)文章
生成EAN13標(biāo)準(zhǔn)的條形碼的ASP代碼實(shí)例
生成EAN13標(biāo)準(zhǔn)的條形碼的ASP代碼實(shí)例...2007-10-10asp select下拉菜單選擇圖標(biāo)并實(shí)時(shí)顯示
直接在下拉菜單中的option選項(xiàng)中賦予路徑,用asp循環(huán)輸出2008-12-12asp中將有雙引號(hào)標(biāo)題入庫(kù)的方法
asp中將有雙引號(hào)標(biāo)題入庫(kù)的方法,需要的朋友可以參考下2012-10-10分享一個(gè)好東東,動(dòng)態(tài)Include文件 (Dynamic File Includes)
相信很多ASP開(kāi)發(fā)者都會(huì)抱怨ASP的Include方式太老土了,以的方式加載文件實(shí)在是太不舒服了,在實(shí)際項(xiàng)目中不管我是不是一開(kāi)始就要用到這個(gè)文件,我總得早早的把它Include進(jìn)來(lái)...這方面PHP就舒服很多...什么時(shí)候用,什么時(shí)候In...2008-05-05ASP生成隨機(jī)數(shù) ASP生成不重復(fù)隨機(jī)數(shù)
這篇文章主要介紹了ASP生成不重復(fù)隨機(jī)數(shù)的方法,需要的朋友可以參考下2014-05-05asp中讓function同時(shí)返回多個(gè)值的代碼
asp中讓function同時(shí)返回多個(gè)值的代碼,需要的朋友可以參考下。2011-02-02asp動(dòng)態(tài)include文件,方便多模板的實(shí)現(xiàn)
asp動(dòng)態(tài)include文件,方便多模板的實(shí)現(xiàn)...2007-08-08