8

我在使用 Chrome 的 chrome.extension.sendMessage() 的长期页面中看到相当大的内存泄漏

在将 ~200k 事件从 Content-Script 发送到 Background-Page 作为测试后,chrome.Event 的保留大小是 ~50MB 堆快照中保留内存的 ~80%

我一直在试图追查我可能犯的任何错误,关闭一些变量并防止它被 GC'd,但这似乎与 Chrome 事件系统的实现有关

有没有人遇到过这样的事情,或者看到内存泄漏与内容脚本的非常长寿命的扩展,与 bg 页面喋喋不休?

我的内容脚本端的代码:

  csToBg = function(message) {
    var csToBgResponseHandler = function(response) {
      console.log("Got a response from bg");
      };

    var result = chrome.extension.sendMessage(null, message, csToBgResponseHandler)
  };

在背景页面方面,一个简单的 ACK 函数(迷信地避免https://code.google.com/p/chromium/issues/detail?id=114738):

var handleIncomingCSMessage = function(message, sender, sendResponse) {
  var response = message;
  response.acked = "ACK";

  window.console.log("Got a message, ACKing to CS")

  sendResponse(response);
}

以这种方式在 Chrome 23.0.1271.97 中发送约 20 万条消息后,堆快照如下所示:堆快照

内存似乎永远不会在页面的生命周期内被回收,我对如何修复它感到困惑。

编辑:这是一个标准的背景页面,而不是一个事件页面。

4

1 回答 1

2

这可能已在 chrome 32 中修复。

最后!

有关详细信息,请参阅http://code.google.com/p/chromium/issues/detail?id=311665

于 2014-01-17T12:16:47.327 回答