0

在 Chrome 上运行 Webgl 时遇到了一些问题:

  1. 当我关闭我的 Webgl 游戏时,内存仍在 ram 上:

    • 运行我的游戏之前:1.00G 内存
    • 运行我的游戏时:1.9G 内存
    • 关闭我的游戏后:1.8G ram
    • 再次运行游戏:2.5G ram => Array buffer allocation failed
  2. 多次刷新页面时内存碎片=>连续块(堆)没有足够的内存=>数组缓冲区分配失败

关闭我的 WebGL 游戏后如何刷新堆?

有什么建议可以解决这个问题吗?

4

2 回答 2

0

这可能不是 Unity 的错。通常,当 Chrome 中的标签页关闭时,释放内存需要一些时间。有时410几分钟。这是我从Task Manger. 它不会立即释放内存。有时,您甚至必须关闭当前的 Chrome 浏览器才能释放已关闭的选项卡内存。我不知道这是错误还是功能。也许,打电话GC.Collect()可能会有所帮助。

您应该将下面的代码放入您的脚本中,看看是否有帮助。

void OnDisable()
{
    GC.Collect();
    GC.WaitForPendingFinalizers();
}
于 2016-09-08T06:49:38.040 回答
0

根据Unity 2019.1 中的 Unity 论坛,有适当的方法来退出和清理 WebGL 播放器:

  • C#:调用 Application.Quit()
  • JS:调用 unityInstance.Quit(callback)

您可以像这样使用 JS 异步函数:

unityInstance.Quit(function() {
    console.log("done!");
});
unityInstance = null;

如果您使用的是 C# 的 Application.Quit,那么您可以在 JS 中提供它的回调,如下所示:

UnityLoader.instantiate("unityContainer", "%UNITY_WEBGL_BUILD_URL%", {onProgress: UnityProgress,
    Module:{
      onQuit : function(){
        console.log("unity has quit");
      }
    }
});

我的观察/警告: 根据我目前的观察,它没有释放内存,第二个是目前 unity 2019 处于 beta 阶段。如果有人使用此退出功能,请告诉我它是否有效。

于 2019-03-18T14:30:10.460 回答