在 JScript 中释放内存、批量加载问题及其他

问:我有一些关于 JScript中垃圾回收的问题。我认为在 Microsoft® Internet Explorer 6.0 中有内存泄漏,但在另一方面,它可能是循环引用问题。在我的代码中,我假设“new Object()”属于 JScript,而“document.createElement”属于 Internet Explorer DOM,因此 JScript 中的垃圾回收器无法释放 DOM 元素。这正确吗?避免这一问题的最佳方法是什么呢?

当您将代码加载到 Internet Explorer 6.0 中并单击“Refresh”时,您可以在“Task Manager”中观察到内存增加:

<html>
<body>
  <script type="text/JScript">
    for (i=0; i<1000; i++) {    // this loop enforces the effect
      var model = new Object();
      var element = document.createElement("<br>");
      model.myElement = element;
      element.myModel = model;
      model = null;
      element = null;
      } 
  </script>
</body>
</html>

答:这不是内存泄漏。您正在页面上创建新文本一千次!这会使页面变大。如果您创建了许多无法获得也无法释放的对象,那才是内存泄漏。在这里,您将创建许多元素,Internet Explorer 需要保存它们以正确呈现页面。Internet Explorer 并不知道您以后不会运行操纵您刚刚创建的所有这些对象的脚本。

当页面消失时(当您浏览完,离开浏览器时)会释放内存。它不会泄漏。当销毁页面时,会中断循环引用。

问:我试图通过将 XML 传递给将由 ADO.NET SQL 提供程序调用的存储过程,来将一些 XML 导入数据库。当 XML 文件太大时,它会由于 SqlException 异常(表示发生了严重错误)而失败。我追踪到 sp_xml_preparedocument 时失败了。

使用具有 43403 个字符的 XML 文件时,它运行良好,但是如果我再增加一个字符(通过将最后的 Vendor 字段从“Micros”更改为“Microso”)࿰

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值