Memory leaks Dart Websocket内存泄漏

Memory leaks Dart Websocket内存泄漏,memory-leaks,websocket,dart,Memory Leaks,Websocket,Dart,我正在使用WebSocket接收protcol缓冲区,并遇到内存泄漏。无论传入缓冲区大小和频率如何,都会发生此泄漏 ProtoBuf作为水滴接收,但作为arrayBuffer接收时存在相同的泄漏。目前我实现的只是一个数据包处理程序,它将Blob设置为null,以尝试调用垃圾收集 我的倾听电话: ws.onMessage.listen(掌上电脑) 我的事件处理程序:void handlePacket(message){message=null;} 我不完全理解websocket中的messageE

我正在使用WebSocket接收protcol缓冲区,并遇到内存泄漏。无论传入缓冲区大小和频率如何,都会发生此泄漏

ProtoBuf作为水滴接收,但作为arrayBuffer接收时存在相同的泄漏。目前我实现的只是一个数据包处理程序,它将Blob设置为null,以尝试调用垃圾收集

我的倾听电话:
ws.onMessage.listen(掌上电脑)

我的事件处理程序:
void handlePacket(message){message=null;}

我不完全理解websocket中的messageEvents流是否是一个队列,该队列不是已处理事件的出列队列,但似乎为传入事件分配的所有内存都无法被垃圾回收。感谢所有的帮助

编辑 客户端代码:

  void _openSocket() {
    if (ws == null) {
      ws = new WebSocket('ws://localhost:8080/api/ws/open');
      // ws.binaryType = "arraybuffer";
    }
  }

  void _closeSocket() {
    if (ws != null) {
      ws.close();
      print("socket closed");
      ws = null;
    }
  }

void _openStream (String fieldName, [_]) {
  //Check if we need to open the socket
  _openSocket();
  //Request the proper data
  Map ask = {"Request": "Stream", "Field": fieldName};
  if (ws.readyState == 0){
    ws.onOpen.listen((_) {
      ws.send(JSON.encode(ask));
    });
  } else {
    ws.send(JSON.encode(ask));
  }

  activeQuantities++;
  if (activeQuantities == 1) {
    _listen();
  }
}

// Receive data from the socket
 _listen() {
  ws.onError.listen((_){
    print("Error");
  });
  ws.onClose.listen((_){
    print("Close");
  });
  ws.onMessage.listen(handlePacket);    
}

void handlePacket(message) {
  message = null;
}

看起来Dartium可能会泄漏内存,但当使用Dart2js并在Chrome中运行时,它确实成功地实现了GC,尽管在显示出与Dartium相同的症状之后

代码的其余部分在哪里?您应该包括复制问题所需的所有内容。当单击按钮时,将调用openStream来启动套接字连接和/或向请求的数据添加另一个字段。