本文主要是介绍FPS游戏之漫谈低内存性能优化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
我想各位专门优化公司项目的一定会定位分析出来很多模块明明已经退出了 比如宝箱模块,明明已经离开当前界面,还有很多未常驻内存的资源占用了内存,
那我们遇到低端机器很容易出现闪退,反应速度慢等问题,那么我们一般在当前宝箱模块关闭的时候 断开所有的引用关系,然后在调用unity引擎给我们提供的接口Resources.UnloadUnusedAssets
Resources.UnloadUnusedAssets 是什么呢?为什么要调用这个 ,因为他可以帮你清理没有引用到的资源,是否内存,当然至于他分多少帧 或者说分多少次是否 是他自己的策略。
为什么要分帧 因为东西太多了回收的步骤也很多
下面看官方解释
Resources.UnloadUnusedAssets 是Unity引擎中的一个函数,主要用于优化内存管理。当你的游戏中有一些资源(如纹理、音频文件、模型等)在当前场景或特定的脚本中并未被使用,但它们仍然存在于内存中,这可能会占用不必要的内存空间,特别是在移动设备或者性能有限的平台上,这可能会导致性能下降。 UnloadUnusedAssets 函数的作用就是释放这些未被使用的资源,从而减少内存占用。
这个函数的具体实现细节涉及到Unity的资源管理系统。Unity将所有加载的资源存储在一个全局的资源缓存中,当你需要使用某个资源时,它会从缓存中获取。当你不再需要某个资源时,如果该资源没有被其他地方引用,Unity会将其标记为“未使用”并可能在适当的时候释放其内存。
调用 Resources.UnloadUnusedAssets 后,Unity会检查所有未被引用的资源,并尝试卸载它们。这个过程通常是异步的,因为Unity需要确保在卸载过程中不会影响到游戏的运行。然而,需要注意的是,这个操作并不能立即释放所有的内存,因为Unity可能还会保留一些资源以备后续使用,或者在内存不足时重新加载。
总的来说, Resources.UnloadUnusedAssets 是一个用于优化内存管理的工具,可以帮助开发者在保证游戏性能的同时,更好地管理资源的加载和释放。
作为对比
在Unity引擎中,C#的垃圾回收(Garbage Collection, GC)通常不会直接阻塞主线程,也就是说,GC过程会在后台进行,不会直接影响游戏的实时性。这是因为在Unity中,为了保持流畅的游戏体验,垃圾回收通常被设计为非阻塞的,以避免在执行关键游戏逻辑时暂停。
然而,虽然垃圾回收不会直接阻塞主线程,但频繁的垃圾回收可能会导致短暂的性能下降,因为GC需要扫描和整理内存。如果游戏中的对象创建和销毁非常频繁,或者内存泄漏严重,可能导致GC工作量增大,从而影响游戏性能。因此,开发者应该尽量避免不必要的资源分配和及时释放不再使用的对象,以减少GC的负担。
另外,Unity提供了几种内存管理策略,例如 UseGUILayout 和 ReapObjects ,可以帮助你更好地控制内存的使用和释放,以优化游戏性能。总的来说,虽然GC不会卡住主线程,但合理地管理内存仍然是提高游戏性能的重要手段。
这篇关于FPS游戏之漫谈低内存性能优化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!