亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何修復此內存泄漏監視器功能以避免最大調用堆棧循環?

如何修復此內存泄漏監視器功能以避免最大調用堆棧循環?

牛魔王的故事 2022-07-21 10:29:50
我在追蹤 Node.js 中的內存泄漏時遇到了麻煩,并編寫了一個函數來監視對象和數組大小隨著時間的推移而增加,但我的函數無限循環。我在其中寫了一條規定來檢測而不是迭代循環結構,但我犯了一些愚蠢的錯誤,無法弄清楚是什么。//monitor.jsconst isCircular = require("../funcs/is-circular.js");module.exports = class {  constructor() {  }  countObjContents(obj, count = 0) {    if (Array.isArray(obj)) count += this.countObjContents(obj)    else if (typeof obj == "object") {      if (isCircular(obj)) {        console.log("!!! is circular")        count++;      } else {        console.log("not circular")        Object.values(obj).forEach(prop => {          if (isCircular(prop)) {            console.log("!!! is circular")            count++;          } else {            console.log("not circular")            count += this.countObjContents(obj);          }        });      }    } else count++;    return count;  }  watch(obj, name) {    let count = false;    setInterval(() => {      console.log("monitoring", name)      let newCount = this.countObjContents(obj)      if (!count) count = newCount;      else {        console.log("object", name, "increased from", count, "properties to", newCount);        count = newCount;      }    }, 5000);  }}//is-circular.jsmodule.exports = (obj) => {  try {      JSON.stringify(obj);  } catch (e) {      return true;  }  return false;}這次我犯了什么愚蠢的錯誤?這似乎是簡單的代碼,而我不明白為什么它是無限循環的事實令人尷尬,哈哈。
查看完整描述

1 回答

?
長風秋雁

TA貢獻1757條經驗 獲得超7個贊

您的 foreach 循環使用原始 obj 而不是道具調用 countObjContents 。

您還在第一次條件檢查中重新調用 countObjContents。

  countObjContents(obj, count = 0) {
      if (Array.isArray(obj)) count += this.countObjContents(obj)

僅這一部分就是一個無限循環


查看完整回答
反對 回復 2022-07-21
  • 1 回答
  • 0 關注
  • 96 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號