【问题标题】:Memory leak in Chrome with Websockets带有 Websockets 的 Chrome 中的内存泄漏
【发布时间】:2019-01-30 01:25:07
【问题描述】:

我们通过 websocket 将二进制数据从我们的服务器传输到 web 浏览器。 浏览器接收数据就好了;我们可以用 Javascript 来操作它。

代码是很基础的:

   function WebSocketTest()
   {
        if ("WebSocket" in window)
        {
           var ws = new WebSocket("ws://localhost:3456/someresource");

           ......

           ws.onmessage = function (evt) 
           { 
              //var received_msg = evt.data;
              //var reader = new window.FileReader();
              //...........
           };

           ..............................................
           ..............................................

问题是——即使是这种最简单的形式(onmessage 函数都是空的,所以我们对 evt.data,它是一个二进制 blob 什么都不做),Chrome 浏览器的内存使用量一直在增长,好像垃圾收集器永远不会释放斑点。它会永远增长,直到 Chrome 关闭 websocket 连接或崩溃。我们尝试使用各种方法手动释放 evt.data,但没有任何帮助。您可能希望上面的代码不会导致 Chrome 中的内存泄漏,对吗?如何释放evt.data引用的blob?

【问题讨论】:

  • 请不要发布已注释或未注释的点序列,而不是实际代码。请花时间设计和实施the exact shortest code sample that reproduces your problem
  • 什么?考虑不存在的点序列。问题只发生在您看到的代码上,没有其他问题。
  • 哦,我明白了。抱歉,请去掉这些点并合上你的花括号。请阅读我发布的链接,你永远不会知道。

标签: websocket


【解决方案1】:

嘿,我找到了“内存泄漏”的原因 - 这不是内存泄漏,而是我的编程错误。在这里发帖以防其他人犯同样的错误。发生的情况是 - 对于大于 64KB 的消息,您需要将数据长度格式化为以网络字节顺序打包的 64 位整数。我没有正确地将基于 Windows 的 __int64 转换为网络字节顺序。所以浏览器认为它正在下载一个巨大的消息(10GB 或类似的东西) - 并一直下载直到内存不足。

【讨论】:

    猜你喜欢
    • 2017-05-02
    • 2011-07-08
    • 1970-01-01
    • 1970-01-01
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    • 2020-11-01
    • 1970-01-01
    相关资源
    最近更新 更多