首頁  >  文章  >  web前端  >  關於ie的記憶體洩漏與javascript記憶體釋放

關於ie的記憶體洩漏與javascript記憶體釋放

黄舟
黄舟原創
2016-12-14 15:58:28918瀏覽

最近做一個公司的業務系統,公司要求能盡可能的與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>   <br/>    <br/>  //32M   <br/>  function   造成  <br/>  for(var   i=3;i<24;i++)   <br/>  str+=str;   <br/>  return   str ;   <br/>  }   <br/>    <br/>  function   A(a)   <br/>  {   🎠   <br/>  {   <br/>  }   <br/>  }   <br/>    <br/>    <br/>  ;   <br/>  CollectGarbage();   <br/>  //明顯,已經釋放了。 <br/>  r=null;   <br/>  alert(2);   <br/>  CollectGarbage();   <br/>    <br/> (腳本層)已經理解得很透了。 <br/>  (每一層選單分配?M的內存.對著任務管理器才看到情況)  <br/><br/><br/>注:<br/>CollectGarbage()通常會在核心推出內存,因就是IE或NS程序結束的時候才會調用.這樣才是安全的  <br/><br/> <br/><p><br/>說明:<br/>1)   如果你在另一個window中keep了該window中的object的reference,即使關閉該window,內存也沒有釋放   <br/>    window.open()   may   share a   process   with   its   opener   (_blank   or   _new     window   may   not).   That   is,   even   if   you   see   those   two   windows   on   the   desktop,   if   you   look   at   the   process   table   in   the   Task   Manager,   you   may   only   see   one   IEXPLORE.EXE   running. Memory   may   only   be   released   when   the   process   is   terminated   <br/>     所在window,   IE會crash,   封包記憶體錯誤(或要求,重新啟動) <br/>    <br/>  I   would   say   this   looks   like   a   bug,    .php.cn)! <br/><br/></script>


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn