記憶體釋放在使用ext開發opoa系統時顯得尤為重要
開始接觸ext開發,中間花了很多時間來解決記憶體洩漏。
最開始ext還是3.0版,洩漏得一塌胡塗,也沒什麼處理頭緒,只知道在ondestroy裡加delete語句,用sieve看效果。
而ext3.1有了乙個很大的進步,基本上絕大多數元件都沒有洩漏了。但並不意味著ext沒洩漏,做出的頁面也沒洩漏。js是自動**的,而只要有乙個引用沒有釋放就可能導致一大片js物件及dom節點無法釋放,所以遲早還是會面對這個問題。
一、洩漏的分類
1. 元件建立後未銷毀(ext層面)
這裡說的元件一般是指繼承自ext.component的,它在建立時會註冊到ext.componentmgr中,不呼叫destroy方法是不會從中移除的,所以它永遠不會被釋放。
大部分元件是放置於container中,container銷毀會將子元件一起銷毀,是不存在這個問題。但當它是ext.window(沒有父容器)或手工render的元件(例如用模板畫html,再render到指定dom節點)時,如果不主動銷毀問題就發生了。
2. 元件自身有洩漏或使用不當(js&dom層面)
目前ext原生元件的洩漏已經很少了,但自己擴充套件的元件不注意的話會造成瀏覽器無法釋放的洩漏。
而使用不當是指破壞了元件內部結構,導致無法完全釋放。
3. js物件洩漏(js層面)
js是有自動**機制,但它也只會**你用不到的物件(或者說你已經不可能訪問到的物件)
所以,如果在乙個長時間執行的js**中,你建立了很多屬性或物件,並且一直儲存著它們的引用,也會使記憶體增長。
正確的做法是,不用的屬性就要delete掉,不用的物件也要解除引用。(delete引用的屬性或置變數為null)
記憶體洩露分析
記憶體洩露分析demo gflags標誌設定好後,開啟cmd 鍵入要定位記憶體洩露的程式gflags.exe i memroyleak.exe 程式名稱 ust 如圖成功後,開啟memoryleak.exe程式 命令格式 umdh pn memoryleak.exe 程式名稱 f snap1.log...
記憶體洩露分析
記憶體洩露分析demo gflags標誌設定好後,開啟cmd 鍵入要定位記憶體洩露的程式gflags.exe i memroyleak.exe 程式名稱 ust 如圖成功後,開啟memoryleak.exe程式 命令格式 umdh pn memoryleak.exe 程式名稱 f snap1.log...
Windows 記憶體洩露分析
記憶體洩露分析demo gflags標誌設定好後,開啟cmd 鍵入要定位記憶體洩露的程式gflags.exe i memroyleak.exe 程式名稱 ust 如圖成功後,開啟memoryleak.exe程式 命令格式 umdh pn memoryleak.exe 程式名稱 f snap1.log...