在Chrome上运行Webgl时遇到了一些问题:
当我关闭我的Webgl游戏时,内存仍处于ram状态:
多次刷新页面时内存碎片=>没有足够的内存用于连续块(堆)=>数组缓冲区分配失败
关闭我的WebGL游戏后如何才能获得新堆?
有任何解决问题的建议吗?
答案 0 :(得分:0)
这可能不是Unity的错。通常,当Chrome中的标签关闭时,内存需要一段时间才能释放。有时4
到10
分钟。这是我从Task Manger
注意到的。它不会立即释放内存。有时,您甚至必须关闭当前的Chrome浏览器才能释放关闭的标签内存。我无法判断这是一个错误或功能。也许,致电GC.Collect()
可能有帮助。
您应该将下面的代码放在脚本中,看看是否有帮助。
void OnDisable()
{
GC.Collect();
GC.WaitForPendingFinalizers();
}
答案 1 :(得分:0)
According to Unity Forums在Unity 2019.1中,有一种退出和清理WebGL播放器的正确方法:
您可以像这样使用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阶段。如果有人使用此退出功能,请告诉我它是否有效。