【问题标题】:Is there memory leak issue if not calling clearTimout after calling setTimeout如果在调用 setTimeout 后不调用 clearTimout,是否存在内存泄漏问题
【发布时间】:2010-11-22 10:13:04
【问题描述】:

调用setTimeout后,不调用clearTimeout是否存在内存泄漏问题?

谢谢。

【问题讨论】:

  • 你为什么要问?你能详细说明吗?您在使用 setTimeout 时遇到过内存泄漏吗?您的目标是哪些浏览器?

标签: javascript


【解决方案1】:

没有。仅当您想阻止挂起的 setTimeout 发生时才需要调用 clearTimeout。 setTimeout 发生后,定时器 id 不再有效,但幸运的是,使用无效的定时器 id 调用 clearTimeout 是无害的。

如果您看到发生内存泄漏,则问题出在其他地方。

【讨论】:

  • 不调用setTiemout怎么办?
  • @jsbisht 这没有意义。从未调用 setTimeout 的唯一原因是您从未进入事件循环。例如,如果你有一个无限循环 - 那么 setTimeout 或网络 I/O 或磁盘 I/O 将不会被调用
【解决方案2】:

setTimeout 有时会导致内存泄漏...请参阅以下文章:setTimeout memory leaks

但请注意,IEx 具有垃圾收集器的精妙之处;我认为,如果您在 Javascript 闭包中引用 DOM 变量,那么收集机制就会变得混乱,并且不会在请求结束时被丢弃:最终这会成为内存泄漏。我认为这是因为 DOM 变量和内部 JS 变量被两个不同的收集器收集,并且它们没有就不再使用的内容进行正确的交流。

我认为您可以通过将变量设置为 null 来解决此问题:

setTimeout(function(){
    myFunction(parameter); 
    parameter = null
}, myTimeout);

这明确地设置了垃圾收集。

【讨论】:

    猜你喜欢
    • 2014-06-07
    • 2012-08-25
    • 1970-01-01
    • 2021-10-06
    • 2012-07-06
    • 2015-07-27
    • 2013-07-25
    • 1970-01-01
    • 2016-01-23
    相关资源
    最近更新 更多