用途:审查代码中的内存泄漏与 disposable 问题,尤其适用于注册事件监听器、DOM 处理器、生命周期回调,或修复已报告的泄漏(如监听器数量持续增长)。
主要能力(按检查清单顺序):一是 DOM 事件监听器,禁止使用原始 .onload、.onclick 或 addEventListener(),改用 addDisposableListener();二是一次性事件,对只应触发一次的生命周期、关闭或首次变更事件使用 Event.once();三是重复调用的方法,多次调用方法中创建的对象不应注册到类的 this._register(),应使用 MutableDisposable 或向调用方返回 IDisposable,必要时将 Event.once() 与 MutableDisposable 组合;四是与模型绑定的 DisposableStore,创建与模型生命周期绑定的 store 时,应向 store 自身注册 model.onWillDispose(() => store.dispose());五是资源池模式,工厂方法创建池化对象(列表、树)时,disposable 应注册到单个条目而非池类,可用条目级 DisposableStore 并返回 dispose;六是测试验证,每个创建 disposable 对象的测试套件都应调用 ensureNoDisposablesAreLeakedInTestSuite()。
使用方式:按上述六步顺序逐项审查,任意一处遗漏都可能造成大量对象泄漏。修复后通过对比重复操作前后的监听器数量、在测试中运行 ensureNoDisposablesAreLeakedInTestSuite()、确认对象数量随使用趋于稳定来验证。针对聊天相关泄漏,可运行 npm run perf:chat-leak(详见 chat-perf 技能),其在单会话中发送 N 条消息并在每步强制 GC,用线性回归检测堆/DOM 增长;斜率超过 2 MB/msg 表示存在泄漏,可用 --messages 20 --verbose 获得更准确结果。导入示例:import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js'。
适用场景与限制:适用于 VS Code/Positron 扩展、组件与测试代码的泄漏审查。资料未提供该技能的安装命令、收费、价格或平台支持范围,这些暂未提供。