路由跳转时内存泄漏问题

发布于 2024-12-06 09:27:37

最近在查看浏览器内存的时候发现存在内存泄漏
场景加载后路由跳转再跳回来发现内存多出20m 每次跳转的时候我用的import {dispose } from "@tresjs/core";
这个dispose方法去销毁模型但是发现没用还是有内存泄漏
image.png

image.png
有没有大神解答以下

查看更多

关注者
0
被浏览
299
2 个回答
地虎降天龙
地虎降天龙 图形社区官方人员 2024-12-06
也许宇宙中最反直觉的真理是,你给别人的越多,你得到的也越多。

场景内的东西其实涉及的比较多,模型,素材,材质,读取的其他资源等等
首先是自己读取的素材 进行释放,然后再递归场景内的元素 逐一释放
这部分 进入调试模式 查看 场景内的物体元素
image.png

类似代码这里:

function disposeNode(node) {
    if (!node) return;

    // 释放几何体
    if (node.geometry) {
        node.geometry.dispose();
    }

    // 释放材质
    if (node.material) {
        if (Array.isArray(node.material)) {
            // 如果材质是数组(多材质)
            node.material.forEach((material) => material.dispose());
        } else {
            node.material.dispose();
        }
    }

    // 释放纹理(如果材质中有纹理,纹理由 WebGL 管理,需要单独释放)
    if (node.material && node.material.map) {
        node.material.map.dispose();
    }

    // 递归释放子节点
    if (node.children) {
        while (node.children.length > 0) {
            disposeNode(node.children[0]);
            node.remove(node.children[0]);
        }
    }
}
JesueLike
JesueLike 认证达人 2024-12-06
这家伙很懒,什么也没写!

我也这样写过 但还是没有用 我刚才查了一下github https://github.com/Tresjs/tres/issues/449
发现别人也遇到这个问题但是 作者好像还没解决

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览