Memory leaks Dart Websocket内存泄漏
我正在使用WebSocket接收protcol缓冲区,并遇到内存泄漏。无论传入缓冲区大小和频率如何,都会发生此泄漏 ProtoBuf作为水滴接收,但作为arrayBuffer接收时存在相同的泄漏。目前我实现的只是一个数据包处理程序,它将Blob设置为null,以尝试调用垃圾收集 我的倾听电话: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
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来启动套接字连接和/或向请求的数据添加另一个字段。