首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >postMessage webworker内存泄漏

postMessage webworker内存泄漏
EN

Stack Overflow用户
提问于 2015-10-20 05:18:32
回答 1查看 1.4K关注 0票数 2

我使用webworker以10毫秒的间隔传递一些数据。在任务管理器中,我可以看到工作记忆集不断增加,直到我不取消间隔。

这就是我要做的:

发送:

代码语言:javascript
复制
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;
 }

我也尝试过这样做,但没有成功:

代码语言:javascript
复制
// let json =  JSON.stringify( data );
// let arbfr = str2ab(json);
worker.postMessage(data);

有人知道为什么这个可能会泄露吗?我目前正在Chrome上尝试这个功能。

EN

回答 1

Stack Overflow用户

发布于 2015-10-20 05:27:56

通常,web工作线程中的内存泄漏是在主线程和工作线程之间多次传递值时造成的。

如果可能,请尝试仅将数组发送给web worker一次。

您还可以检测您的可转移对象是否正常工作(阵列将被清除)

代码语言:javascript
复制
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!');
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33224101

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档