在 Chrome 上运行 Webgl 时遇到了一些问题:
当我关闭我的 Webgl 游戏时,内存仍在 ram 上:
- 运行我的游戏之前:1.00G 内存
- 运行我的游戏时:1.9G 内存
- 关闭我的游戏后:1.8G ram
- 再次运行游戏:2.5G ram => Array buffer allocation failed
多次刷新页面时内存碎片=>连续块(堆)没有足够的内存=>数组缓冲区分配失败
关闭我的 WebGL 游戏后如何刷新堆?
有什么建议可以解决这个问题吗?
在 Chrome 上运行 Webgl 时遇到了一些问题:
当我关闭我的 Webgl 游戏时,内存仍在 ram 上:
多次刷新页面时内存碎片=>连续块(堆)没有足够的内存=>数组缓冲区分配失败
关闭我的 WebGL 游戏后如何刷新堆?
有什么建议可以解决这个问题吗?
这可能不是 Unity 的错。通常,当 Chrome 中的标签页关闭时,释放内存需要一些时间。有时4
到10
几分钟。这是我从Task Manger
. 它不会立即释放内存。有时,您甚至必须关闭当前的 Chrome 浏览器才能释放已关闭的选项卡内存。我不知道这是错误还是功能。也许,打电话GC.Collect()
可能会有所帮助。
您应该将下面的代码放入您的脚本中,看看是否有帮助。
void OnDisable()
{
GC.Collect();
GC.WaitForPendingFinalizers();
}
根据Unity 2019.1 中的 Unity 论坛,有适当的方法来退出和清理 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");
}
}
});
我的观察/警告: 根据我目前的观察,它没有释放内存,第二个是目前 unity 2019 处于 beta 阶段。如果有人使用此退出功能,请告诉我它是否有效。