DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> 關於JavaScript >> 關於ie的內存洩漏與javascript內存釋放
關於ie的內存洩漏與javascript內存釋放
編輯:關於JavaScript     

     最近做一個公司的業務系統,公司要求能盡可能的與c/s近似,也就是如c/s一樣,點擊文本框可以彈出此項目的相關內容,進行選擇輸入。
     我使用了彈出窗口,然後在子窗口雙擊選中項目,把選中的值返回給父窗體。
     在系統做完了之後,在客戶使用的過程,由於客戶使用的是512m的內存配置,所以在打開了30--40個窗體之後,ie的虛擬內存占用量達到近200m,從而使系統變慢,javascript的運行也變慢了。

      在google搜了一下之後,才知道可能是由於ie的內存洩漏引起的。具體可以參看www.cnblogs.com中的相關文章。

      我使用任務管理器,打開一個彈出窗口,ie內存就增加1-3m,然後關閉窗口,有時內存並不釋放,有時才釋放幾十k。看來問題出在了內存釋放上面。

      接著按內存釋放這個思路,進行搜索查找方法,來進行解決這個問題。我找到一個javascript未公開的函數CollectGarbage,這個函數是用來進行內存釋放的。我在所有的彈出窗口結束之前把所有的自己定義的javasctip的變量設置為null,並調用CollectGarbage函數。

      javascript中把變量設為null,javascript並不會把內存釋放,當下次再次定義變量時,就會覆蓋此變量所在的內存。如果不設為null,javascript再次定義變量時,會開辟一個新的內存空間。

      在使用以上處理之後,再次打開窗口,ie的內存每次還是增加1-3m,但是在關閉窗口之後,則ie會釋放一定數量的內存在500k至2m。起到了一定的作用。
       由於我在頁面中使用了第三方的控件,第三方的控件中的javascript中的內存是如何管理,就不是由我來控制的了。
     


1.javascript內存釋放的方法示例


  把所有上級函數的參數即使設為null,並使用CollectGarbage來釋放內存。  


示例
  <script>  
   
  //32M  
  function   AllocMem()  
  {  
  var   str="12345678";  
  for(var   i=3;i<24;i++)  
  str+=str;  
  return   str;  
  }  
   
  function   A(a)  
  {  
  a=null;  
  return   r;  
  function   r()  
  {  
  }  
  }  
   
   
  var   f=A(AllocMem());  
  alert(1);  
  CollectGarbage();  
  //明顯,已經釋放了。  
  r=null;  
  alert(2);  
  CollectGarbage();  
   
  </script>  
   
  ----------  
  裡面對於內存釋放的規則(腳本層)已經理解得很透了。  
  (每一層菜單分配?M的內存.對著任務管理器才看到情況)  


注:
CollectGarbage()通常會在核心推出內存,因就是IE或NS程序結束的時候才會調用.這樣才是安全的  


說明:
1)   如果你在另一個window中keep了該window中的object的reference,即使關閉該window,內存也沒有釋放  
   
  As   you   might   know,   windows   opened   with   window.open()   may   share   a   process   with   its   opener   (_blank   or   _new   &nb

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved