我在追蹤 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;}這次我犯了什么愚蠢的錯誤?這似乎是簡單的代碼,而我不明白為什么它是無限循環的事實令人尷尬,哈哈。
如何修復此內存泄漏監視器功能以避免最大調用堆棧循環?
牛魔王的故事
2022-07-21 10:29:50