一份ASP記憶體的釋放的實驗報告

來源:互聯網
上載者:User

實驗目的:驗證主動釋放記憶體變數是否有價值.

實驗原始代碼:

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

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

for i = 0 to 5000000 ' 延遲
next

'temp1="" '開關變數

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

記憶體變化1:

解釋:CPU的波形變化是由頁面自動重新整理引起的,不必在意!我們要觀察的只是記憶體線的變化。這是原始狀態,記憶體線保持水平無變化。

好,下面實驗正式開始:

第一步:

把原始代碼中的
'temp1 = space(1024*1024*50) '50MB
前面的注釋號 ' 去掉,改成
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="" '開關變數

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

再觀察記憶體變化一段時間

記憶體變化2:

結果:記憶體開始出現方波。

第二步:

接著也把
'temp2 = space(1024*1024*50) '50MB
前面的注釋號 ' 去掉,改成
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="" '開關變數

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>

記憶體變化3:

結果:方波比原來高了一層,成了階梯形。

第三步:

接著也把
'temp1="" '開關變數
前面的注釋號 ' 去掉,改成
temp1="" '開關變數

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

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

for i = 0 to 5000000 ' 延遲
next

temp1="" '開關變數

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>

看看是否能釋放第一個變數所佔用的記憶體空間

記憶體變化4:

結果:很明顯,第二個波鋒不見了,看來釋放成功了。

第四步:

我們先把代碼恢複成最初的原始代碼,等記憶體平穩下來後,再把前三步快速做一次,以便在同一個裡比較記憶體的變化情況。

記憶體變化5:

結果:可以很清楚的看到三種情況的不同。無倫執行時間和記憶體佔用,變數主動釋放都比不被動釋放的好。

第五步:

接著第三步的代碼,把
temp1="" '開關變數
temp2 = space(1024*1024*50) '50MB
改成
'temp1="" '開關變數
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="" '開關變數

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>

記憶體變化6:

結果:再看下步才給結論吧

第六步:


'temp1="" '開關變數

改成
temp1="" '開關變數

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

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

for i = 0 to 5000000 ' 延遲
next

temp1="" '開關變數

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>

看看結果會不會有所不同

記憶體變化7:

結果:用同一個變數名,即使再重新賦值,原來的佔用過的空間也得不到釋放或替換(6說明),而且等程式被動釋放時,使用的時間也比手動的慢(綜合6、7說明)。

下面把
temp1="" '開關變數

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

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

temp1="" '開關變數

<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="" '開關變數

for i = 0 to 5000000 ' 延遲
next

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

後的8:

結果:可以看出主動釋放比被動的所需要的時間要少(波峰尖)

實驗結論:

主動來釋放記憶體是有作用的,不是某些人所說的要等頁面結束才能釋放掉,或者只是獃等程式結束再自動釋放,而是在執行過程中也可以人為控制的。特別是程式中需要調用到幾個大體積的變數時,儘快釋放掉已無用的變數,不但可以減輕伺服器的負擔,也可以加快程式的運行。

如果發現此實驗過程或結論有誤,歡迎指正。

最後,關於用"",empty 或 null 來釋放,結果基本是一樣,有興趣的可以自己親自動手比較試試。至於說用哪個來釋放變數更正規或更有效率,我無法在此實驗中判斷出來,希望知道的朋友來指教。

(出處:Viphot)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.