2012-03-22 60 views
3

我開發了一個客戶端應用程序,不幸的是我懷疑內存泄漏。
該應用程序有很多私有克隆對象,並且在每個函數結束時,我通過將它們設置爲null來處理這些對象。 (foo = null;Javascript應用程序 - 泄漏內存

我的問題是,我應該如何處理對象?
使用foo = null足夠嗎?

此外,有沒有任何工具可以幫助我識別問題?

SOLUTION

最終導致誤用jQuery的進度條

 function updateProgressBar() { 
     if (!handle) //by adding this, the problem solved. 
      return; 
     jQuery("#progressbar").progressbar({ 
      value: ++pct 
     }); 
     if (pct >= 100) { 
      clearInterval(handle); 
      pct = 0; 
      setInterval("updateProgressBar()", 300); 
     } 
    } 
+2

你爲什麼懷疑有內存泄漏? – KTastrophy 2012-03-22 16:16:05

+0

我觀察了瀏覽器的過程,我將在一兩分鐘後訪問應用程序,內存急劇增加,最終我從瀏覽器收到一條消息,提示「內存不足」。也許我用「懷疑」來使用錯誤的詞。正確的是,我確信:) – StrouMfios 2012-03-22 16:20:28

+0

查看chrome開發人員工具。有一個堆快照可以顯示你在x時間消耗了多少內存,並可以讓你瀏覽整個鏈。 – Snuffleupagus 2012-03-22 16:21:17

回答

3

在瀏覽器的主要原因是內存泄漏的我的問題是,當你有DOM和JavaScript之間的循環鏈接對象。絕大多數情況下,孤立的DOM節點仍會引用事件處理程序或其他JS對象。 http://code.google.com/chrome/devtools/docs/heap-profiling-dom-leaks.html

Chrome開發者工具,可以讓你看堆和檢查仍在躺在存儲單元,但不是通過使用http://gent.ilcore.com/2011/08/finding-memory-leaks.html

但要解決企業的實際答案「堆分析器」,設置屬性爲null足以打破循環引用並應修復內存泄漏。

+0

你建議我的第二個網址很棒。非常感謝 – StrouMfios 2012-03-22 16:42:44

+0

不幸的是,第二個鏈接是指具有Mac的用戶。任何用戶使用Mac都應該放棄。愚蠢的Mac,技巧是爲孩子們。 – ShadowScripter 2012-03-22 17:40:47

+0

@ShadowScripter沒有得到你的幽默:p – 2012-03-22 22:35:44

0

這可能是關閉的問題嗎?您應該嘗試使用當前瀏覽器提供的方法,例如Chrome的Speed Tracer

在任何情況下,您正在使用的代碼片段將有助於嘗試識別問題。