FPS游戏之漫谈低内存性能优化

2024-02-28 12:12

本文主要是介绍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游戏之漫谈低内存性能优化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/755469

相关文章

Zabbix在MySQL性能监控方面的运用及最佳实践记录

《Zabbix在MySQL性能监控方面的运用及最佳实践记录》Zabbix通过自定义脚本和内置模板监控MySQL核心指标(连接、查询、资源、复制),支持自动发现多实例及告警通知,结合可视化仪表盘,可有效... 目录一、核心监控指标及配置1. 关键监控指标示例2. 配置方法二、自动发现与多实例管理1. 实践步骤

MySQL深分页进行性能优化的常见方法

《MySQL深分页进行性能优化的常见方法》在Web应用中,分页查询是数据库操作中的常见需求,然而,在面对大型数据集时,深分页(deeppagination)却成为了性能优化的一个挑战,在本文中,我们将... 目录引言:深分页,真的只是“翻页慢”那么简单吗?一、背景介绍二、深分页的性能问题三、业务场景分析四、

Linux进程CPU绑定优化与实践过程

《Linux进程CPU绑定优化与实践过程》Linux支持进程绑定至特定CPU核心,通过sched_setaffinity系统调用和taskset工具实现,优化缓存效率与上下文切换,提升多核计算性能,适... 目录1. 多核处理器及并行计算概念1.1 多核处理器架构概述1.2 并行计算的含义及重要性1.3 并

MySQL 多列 IN 查询之语法、性能与实战技巧(最新整理)

《MySQL多列IN查询之语法、性能与实战技巧(最新整理)》本文详解MySQL多列IN查询,对比传统OR写法,强调其简洁高效,适合批量匹配复合键,通过联合索引、分批次优化提升性能,兼容多种数据库... 目录一、基础语法:多列 IN 的两种写法1. 直接值列表2. 子查询二、对比传统 OR 的写法三、性能分析

Linux系统性能检测命令详解

《Linux系统性能检测命令详解》本文介绍了Linux系统常用的监控命令(如top、vmstat、iostat、htop等)及其参数功能,涵盖进程状态、内存使用、磁盘I/O、系统负载等多维度资源监控,... 目录toppsuptimevmstatIOStatiotopslabtophtopdstatnmon

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.

Java内存分配与JVM参数详解(推荐)

《Java内存分配与JVM参数详解(推荐)》本文详解JVM内存结构与参数调整,涵盖堆分代、元空间、GC选择及优化策略,帮助开发者提升性能、避免内存泄漏,本文给大家介绍Java内存分配与JVM参数详解,... 目录引言JVM内存结构JVM参数概述堆内存分配年轻代与老年代调整堆内存大小调整年轻代与老年代比例元空

MyBatisPlus如何优化千万级数据的CRUD

《MyBatisPlus如何优化千万级数据的CRUD》最近负责的一个项目,数据库表量级破千万,每次执行CRUD都像走钢丝,稍有不慎就引起数据库报警,本文就结合这个项目的实战经验,聊聊MyBatisPl... 目录背景一、MyBATis Plus 简介二、千万级数据的挑战三、优化 CRUD 的关键策略1. 查

C++高效内存池实现减少动态分配开销的解决方案

《C++高效内存池实现减少动态分配开销的解决方案》C++动态内存分配存在系统调用开销、碎片化和锁竞争等性能问题,内存池通过预分配、分块管理和缓存复用解决这些问题,下面就来了解一下... 目录一、C++内存分配的性能挑战二、内存池技术的核心原理三、主流内存池实现:TCMalloc与Jemalloc1. TCM

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部