【问题标题】:IE and Memory accumulation in JavascriptJavascript中的IE和内存积累
【发布时间】:2010-10-05 23:04:36
【问题描述】:

这是测试网址

http://edventures.com/temp/divtest.php

程序:

  1. 关闭所有 IE 实例。
  2. 在IE7中打开网址
  3. 打开任务管理器,查找IE消耗的内存
  4. 现在点击创建按钮,
  5. 观察它会增加大约 2K 的内存
  6. 现在单击“销毁”按钮,DIV 将被销毁,但内存保持不变。
  7. 您可以反复尝试,内存只会增加。

有没有办法解决这个问题?有什么方法可以在不重新加载窗口的情况下强制调用垃圾收集器?

我假设当我删除 DIV 时,内存将被释放,但似乎不是那样工作的。

请告诉我任何解决方法。

感谢您的帮助。

苏哈斯

【问题讨论】:

    标签: javascript internet-explorer memory


    【解决方案1】:

    以下是在 IE 中创建 DOM 元素和防止内存泄漏的方法。

    function createDOMElement(el) {
      var el = document.createElement(el);
    
      try {
        return el;
      }
      finally {
        el = null;
      }
    }
    

    您可以在执行其他 DOM 操作时使用 try/finally 技巧的变体来防止泄漏。

    【讨论】:

    • 我不确定这段代码做了什么或者它有什么不同,但 daammmm 它工作得更好,我尝试打开 3 个具有不同 ID 的 Div,内存保持不变,你是一个有才华的人,谢谢你这么多!!!!!!!!!!苏哈斯
    • 哈哈欢迎您。不同之处在于函数中创建的元素没有被垃圾收集清理。无论如何,finally 语句中发生的任何事情都会执行。所以基本上你在修补 IE 糟糕的垃圾收集时遇到了困难。
    • 绝招!我猜如果你将返回的el存储在调用代码中,你仍然需要手动销毁它?
    • 不得不说,因为我正在以不同的方式和在许多应用程序中测试它,它似乎工作得很好,非常非常酷,谢谢分享。
    • +1 - IE 至少在过去 5 年中存在 javascript 垃圾收集错误,在您关闭浏览器之前不会释放内存 - 感谢您的解决方法!
    【解决方案2】:

    是的 - IE 有一些可怕的内存泄漏。

    查看IE Drip - 你基本上必须设计你的页面,这样它们就不会导致这样的 IE 泄漏。

    这也是 IE 如此受人厌恶的部分原因。

    为避免 IE 泄漏,您必须非常小心地向页面添加 HTML 元素,尤其是表格。对非 HTML 3.2 属性要特别小心 - IE7 基本上仍然是 IE4,而旧 HTML 规范之外的属性往往会出错。

    【讨论】:

    • 感谢您的快速回复,但根据blogs.msdn.com/gpde/pages/javascript-memory-leak-detector.aspx 没有检测到内存泄漏。似乎 GC 调用的频率不够高。有什么建议?谢谢
    • javascript 中的 GC 相当差 - 你肯定没有 C# 或 Java 中所期望的那种控制。 Chrome 和下一个 FX 速度如此之快的原因之一是因为它们(最终)正确地执行了 GC。
    【解决方案3】:

    您是否在其他浏览器中尝试过这个实验? Firefox的内存消耗比我机器上的IE差很多...

    【讨论】:

      猜你喜欢
      • 2022-10-05
      • 1970-01-01
      • 2016-06-03
      • 2016-07-11
      • 1970-01-01
      • 2015-07-20
      • 2015-11-18
      • 2018-06-01
      • 1970-01-01
      相关资源
      最近更新 更多