Javascript 三个 JS 和 GC
Javascript THREEJS and GC
我尝试优化我的 threejs 场景,(即使不使用该场景也会增加 CPU 使用率)。
我阅读了很多解决方案,并尝试使用 dispose()
删除网格内存(尽量避免内存泄漏)
labelMesh[i].geometry.dispose();
labelMesh[i].material.dispose();
但是当我检查 Javascript Profiler 时,dispose()
GC 增加了 2 倍 CPU。
没有处置():
使用处置():
我保留这个解决方案还是不保留?什么是最佳选择?
I keep this solution or no ? What is a best option ?
绝对推荐使用.dispose()
。关于这个主题实际上有一个官方指南:
https://threejs.org/docs/index.html#manual/en/introduction/How-to-dispose-of-objects。
但是,即使在正确调用 .dispose()
时,仍然存在阻碍 three.js
释放资源的问题(请参阅 https://github.com/mrdoob/three.js/issues/12447)。发生这种情况是因为 three.js
的内部渲染列表仍然包含对某些对象的引用。由于这些隐藏的引用,调用 .dispose()
将释放 GPU 内存但不会释放 CPU 内存。
解决此问题的方法是调用 renderer.renderLists.dispose()
.
three.js R107
我尝试优化我的 threejs 场景,(即使不使用该场景也会增加 CPU 使用率)。
我阅读了很多解决方案,并尝试使用 dispose()
删除网格内存(尽量避免内存泄漏)
labelMesh[i].geometry.dispose();
labelMesh[i].material.dispose();
但是当我检查 Javascript Profiler 时,dispose()
GC 增加了 2 倍 CPU。
没有处置():
使用处置():
我保留这个解决方案还是不保留?什么是最佳选择?
I keep this solution or no ? What is a best option ?
绝对推荐使用.dispose()
。关于这个主题实际上有一个官方指南:
https://threejs.org/docs/index.html#manual/en/introduction/How-to-dispose-of-objects。
但是,即使在正确调用 .dispose()
时,仍然存在阻碍 three.js
释放资源的问题(请参阅 https://github.com/mrdoob/three.js/issues/12447)。发生这种情况是因为 three.js
的内部渲染列表仍然包含对某些对象的引用。由于这些隐藏的引用,调用 .dispose()
将释放 GPU 内存但不会释放 CPU 内存。
解决此问题的方法是调用 renderer.renderLists.dispose()
.
three.js R107