2012-03-22 151 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

在任何情况下,您正在使用的代码片段将有助于尝试识别问题。