Chrome上的新堆内存WebGL Unity

问题描述 投票:0回答:2

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

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

关闭我的WebGL游戏后,我怎么能新鲜堆?

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

memory unity3d unity-webgl
2个回答
0
投票

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

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

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

0
投票

According to Unity Forums在Unity 2019.1中,有适当的方法来退出和清理WebGL播放器:

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

您可以像这样使用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处于测试阶段。如果有人使用此退出功能,请告诉我它是否正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.