Three.js 中的内存泄漏

2023-11-22

我们正在尝试创建一个单页面应用程序,用户可以在其中在多个 Three.js 应用程序之间切换。然而,我们注意到该选项卡的内存使用量不断增加。我们的应用程序中没有内存泄漏,并且 Three.js 变量似乎没有从 RAM 中清除。

重新创建的步骤

  1. Visit http://trijs.org/examples/并在 Google Chrome 中打开任务管理器以注意相关选项卡的内存使用情况。
  2. 不断在示例之间切换,您会注意到内存使用量不断增加,并且似乎 GC 从未发生或无法取消链接以前消耗的内存块。
  3. 对于我的具有以下配置的笔记本电脑https://aboutmybrowser.com/pDp7aTxH当一切都开始冻结时,内存很容易突破 1GB。

我注意到 chromium 和 firefox 上有 2 个关于此内存问题的错误,但尚未提供解决方案。

请帮助我如何释放内存,我在互联网上找到的大部分内容都没有帮助。

PS:我也在 Three.js 上提交了一个错误https://github.com/mrdoob/ Three.js/issues/4276


这就是对我有用的技巧

  1. 创建一个数组来保存添加到场景中的所有项目。
  2. 每当向场景添加额外的项目时,请将其添加到此数组中。
  3. 在 destroy 函数中,运行 scene.remove('item name') 将它们从场景中删除。
  4. 现在迭代数组并手动使所有项目未定义。

这样,我能够在移动到另一个页面后释放超过 600MB 的内存。

Update杜布先生和韦斯特兰利的回答Three.js 和多种形状的内存泄漏

在 webGLRenderer 中,删除网格后

scene.remove( mesh ),

你可以释放内存

renderer.deallocateObject( mesh );

您可以使用以下命令取消分配纹理

renderer.deallocateTexture( texture );

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Three.js 中的内存泄漏 的相关文章

随机推荐

  • 处理 WPF 应用程序中所有异常的最佳实践是什么?

    有没有办法处理WPF应用程序中的所有错误异常和崩溃 我知道关于DispatcherUnhandledException 但它只处理 UI 线程中的异常 不是吗 有没有办法捕获并记录其他线程中的所有异常以及绑定错误 AppDomain Cur
  • AWS Lambda:如何使用Pillow库?

    我正在尝试创建一个 AWS lambda 函数来创建我上传的图像的缩略图 我的脚本在本地运行良好 我遵循了这个tutorial部署我的函数 但我的 Pillow 库有问题 实际上 当我测试我的函数时 我可以看到以下日志 我找到了这个post
  • 如何通过键从gson对象获取值

    我一直在尝试遵循这个解决方案如何从 Java 中查找 JSON 字符串中指定的名称及其值 然而这似乎没有意义 我从字符串定义一个新的 gson 对象 这里的字符串示例 http api soundrop fm spaces XJTt3mXT
  • 已弃用的 getCellType 的替代方案

    我正在使用 org apache poi 3 15 读取 excel 文件 文件扩展名 xlsx 这是我的代码 try FileInputStream fileInputStream new FileInputStream file XSS
  • RichTextBox BeginUpdate() EndUpdate() 扩展方法不起作用

    我有一个 richTextBox 用于执行一些语法突出显示 这是一个小型编辑工具 因此我没有编写自定义语法荧光笔 相反 我正在使用Regex并在检测到输入延迟时使用事件处理程序进行更新Application Idle event Appli
  • C# 中的 RSASSA-PSS

    有谁知道使用哪种签名算法RSACryptoServiceProvider SignHash 我相信它是 RSAPKCS1 这仍然安全吗 有谁知道将 RSASSA PSS 配置为 RSACryptoServiceProvider 的签名算法
  • Oracle 11g如何估计所需的TEMP表空间?

    我们对一些表进行初始批量加载 源和目标都是 Oracle 11g 过程如下 1 截断 2 删除索引 PK 和唯一索引 3 批量插入 4 创建索引 同样是 PK 和唯一索引 现在我收到以下错误 alter table TARGET SCHEM
  • 不是有效 C++/CLI 的 ISO C++ 代码示例

    关于 C CLI 是否是 C 的超集 我在互联网上看到了相互矛盾的答案 接受的答案关于这个问题声称 技术上不行 但没有提供符合 ISO C 的非 C CLI 代码示例 关于这个问题的另一个答案引用了一本相反的书 那么 能否请您提供准确的答案
  • 使用可变参数模板中的参数定义多个方法

    我想以某种方式定义一个基模板类 以便它采用可变模板参数并为每个参数定义一个虚拟方法 其中参数是参数类型 E g Base
  • 如何在Python中逐行打印字典?

    这是字典 cars A speed 70 color 2 B speed 60 color 3 使用这个for loop for keys values in cars items print keys print values 它打印以下
  • C# 中的运算符优先级

    Is int int1 float var2 Count 100 相当于 int int1 float var2 Count 100 它会使用浮点还是整数除法 编辑 如果上述答案是肯定的 那么在这里执行浮点除法有什么好处 and 根据第 7
  • 在 Html 页面中使用 Javascript 调用 Wcf 服务

    我在 VSStudio2012 中有一个 WCF 项目 我想从 JavaScript 函数调用一个方法 JavaScript 文件 var url http localhost 52768 Service1 svc function tes
  • 如何在 XNA 中逐像素绘制 2D?

    我正在尝试使用 XNA 在屏幕上逐像素绘制 但遇到资源问题 我认为最好的方法是使用 1 个纹理来更新每一帧 但我在更新它时遇到了麻烦 这是我到目前为止所得到的 只是作为测试 Texture2D canvas Rectangle traced
  • 在 Python 中使用 dbus 发送消息

    我有 2 个 Python 程序 我只想从一个向另一个发送一条消息 一长串 并且我想使用 dbus 现在 有没有一种简单的方法可以做到这一点 例如 如果消息非常小 我已经部分解决了将消息放在路径中的问题 但后来我不得不使用外部程序 dbus
  • 使用compareTo实现equals方法

    一般问题 当实现默认值的覆盖时equalsJava 中的方法 对于简单地使用已经实现的方法我应该担心什么compareTo方法 vs 将独立逻辑写入 equals 方法 我注意到有人在另一个问题中提到foo equals String nu
  • git 存储库克隆日志记录

    我希望监视 git 存储库中的克隆活动 但是我找不到任何显示如何设置或如何检索此信息的内容 这可能吗 如果是这样 如何设置以及如何检索日志记录信息 您可以使用post checkout用于更新服务器上的数据库或文件的钩子 该钩子在客户端运行
  • 模拟 ngrx 在单元测试中存储带有参数的选择器(Angular)

    我正在尝试为 Angular 中的服务编写单元测试 我想模拟 ngrx 的 store select 函数 这样我就可以测试服务如何对存储选择器返回的不同值做出反应 我希望能够单独模拟每个选择器 我的主要问题是如何模拟参数化选择器 我之前使
  • 使用 r 中的 ggplot2 编辑绘图工具提示中的标签

    我知道这个问题已经被问过很多次了 但我认为自从提出这些问题以来 plotly 的一些底层语法已经发生了变化 使用ggplotly 创建分区统计图会给出长 纬度 组的默认工具提示 以及我的美学变量之一 我知道工具提示仅映射美学内容 我想要做的
  • CLR 同步块地址

    当我做 public class Employee public int exp class Program static void Main string args Employee o1 new Employee o1 exp 3 lo
  • Three.js 中的内存泄漏

    我们正在尝试创建一个单页面应用程序 用户可以在其中在多个 Three js 应用程序之间切换 然而 我们注意到该选项卡的内存使用量不断增加 我们的应用程序中没有内存泄漏 并且 Three js 变量似乎没有从 RAM 中清除 重新创建的步骤