Chrome上的新堆内存WebGL Unity

时间:2016-09-08 06:05:19

标签: memory unity3d unity-webgl

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

  1. 当我关闭我的Webgl游戏时,内存仍处于ram状态:

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

  3. 关闭我的WebGL游戏后如何才能获得新堆?

    有任何解决问题的建议吗?

2 个答案:

答案 0 :(得分:0)

这可能不是Unity的错。通常,当Chrome中的标签关闭时,内存需要一段时间才能释放。有时410分钟。这是我从Task Manger注意到的。它不会立即释放内存。有时,您甚至必须关闭当前的Chrome浏览器才能释放关闭的标签内存。我无法判断这是一个错误或功能。也许,致电GC.Collect()可能有帮助。

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

void OnDisable()
{
    GC.Collect();
    GC.WaitForPendingFinalizers();
}

答案 1 :(得分:0)

According to Unity Forums在Unity 2019.1中,有一种退出和清理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");
      }
    }
});

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