我正在使用网络 worker 以 10 毫秒的间隔传递一些数据。在任务管理器中,我可以看到工作内存集在增加,直到我不取消间隔。
这是我正在做的:
发送:
function send() {
setInterval(function() {
const data = {
array1: get100Arrays(),
array2: get500Arrays()
};
let json = JSON.stringify( data );
let arbfr = str2ab (json);
worker.postMessage(arbfr, [arbfr]);
}, 10);
}
function str2ab(str) {
var buf = new ArrayBuffer(str.length*2); // 2 bytes for each char
var bufView = new Uint16Array(buf);
for (var i=0, strLen=str.length; i<strLen; i++) {
bufView[i] = str.charCodeAt(i);
}
return buf;
}
我也试过只这样做,但没有成功:
// let json = JSON.stringify( data );
// let arbfr = str2ab(json);
worker.postMessage(data);
有人知道为什么会泄露吗?我目前正在 Chrome 上尝试这个。
最佳答案
Web Worker 中的内存泄漏通常是在主线程和工作线程之间多次传递值时产生的。
如果可能,请尝试仅将数组发送给网络 worker 一次。
您还可以检测您的 Transferable Objects 是否正常工作(阵列将被绝育)
var ab = new ArrayBuffer(1);
try {
worker.postMessage(ab, [ab]);
if (ab.byteLength) {
console.log('TRANSFERABLE OBJECTS are not supported in your browser!');
}
else {
console.log('USING TRANSFERABLE OBJECTS');
}
}
catch(e) {
console.log('TRANSFERABLE OBJECTS are not supported in your browser!');
}
关于javascript - postMessage 网络 worker 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33224101/