
WebGPU 工程三维查看器的资源释放从对象所有权到验收指标浏览器里的工程三维查看器在连续打开 BIM、机械 CAD 和工业装配模型时真正难排查的往往不是“显存有没有释放”而是资源到底由谁拥有、什么时候可以销毁以及销毁后业务对象是否仍能被结构树和属性面板访问。1. 先给资源建立所有权建议把一次模型会话拆成四类对象网络与缓存请求、响应、转换缓存CPU 中间态解码结果、索引、ImageBitmapGPU 资源buffer、texture、sampler、bind group业务映射节点 ID、属性、选择状态和协同引用。每个对象都要有明确的 owner 和 dispose 入口。共享纹理不能由任意一个节点直接 destroy而应由引用计数或资源池统一回收。2. 取消必须覆盖异步边界切换模型时AbortController 只能阻止仍在进行的请求。Worker 里的解码、主线程队列里的上传以及已经创建的 GPU 对象仍可能继续执行。可以为每次打开操作分配 generation。任何异步结果在进入公共缓存或当前场景前都检查 signal 和 generation过期结果立即释放临时对象不得回写新场景。3. 显存曲线不能直接当作泄漏结论浏览器和驱动可能延迟回收底层分配所以“关闭模型后显存没有立刻下降”不等于泄漏。验收应该同时观察连续切换模型后活动 Worker 是否回到基线待上传 CPU 数据和 ImageBitmap 数量是否归零GPU buffer、texture、pipeline 的应用侧登记数是否回落结构树节点与选择映射是否没有残留重复打开同一模型时缓存命中是否稳定。如果只有显存曲线没有应用侧资源登记很难定位问题。4. 把释放做成可测试的协议我更倾向于让每个资源池提供 snapshot、retain、release、dispose 四个动作并在开发模式下记录资源来源和最后一个引用。这样可以把“感觉卡顿”变成可复现的回归测试。ModelView 的工程模型查看链路也按这个方向设计首次源格式转换、可复用查看缓存、WebGPU 资源、结构树和选择身份分别管理。开发者披露我是 ModelView 项目开发者。Windows 标准版可用真实工程模型验证连续打开与切换https://gitee.com/onedraw/modelView参考WebGPU GPUBuffer.destroy()https://developer.mozilla.org/en-US/docs/Web/API/GPUBuffer/destroyThree.js Cleanuphttps://threejs.org/manual/en/cleanup.html