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不会卡住主线程,但合理地管理内存仍然是提高游戏性能的重要手段。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/707111.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

parent Project“com.xxx“ not foud 问题

version 飘红,直接清理缓存(Invalidate Caches..)解决。

51单片机晶振频率与定时中断产生pwn占空比

单片机中晶振频率为12MHZ的机器周期怎么算? 1、系统晶振频率是12M,则机器周期=12/12=1us; 2、定时1ms=1*1000=1000us; 3、工作在方式0下:最大计数值是2&a…

高防IP简介

高防IP可以防御的有包括但不限于以下类型: SYN Flood、UDP Flood、ICMP Flood、IGMP Flood、ACK Flood、Ping Sweep 等攻击。高防IP专注于解决云外业务遭受大流量DDoS攻击的防护服务。支持网站和非网站类业务的DDoS、CC防护,用户通过配置转发规则&#x…

Java之美[从菜鸟到高手演变]之GUI编程(一) 认识Java GUI编程

转眼间一年过去了,自从去年毕业以后博客就没怎么更新过了,一来是因为工作忙没有太多的时间去写,二来可能自己变得比较懒惰,所以就放下了。最近突然想继续整理下Java方面的东西,所以就接着写了。为什么选择Java GUI编程…

php docx,pptx,excel表格上传阿里云,腾讯云存储后截取第一页生成缩略图

php把word转图片的方法:首先给服务器安装libreoffice;然后使用exec函数来调用命令行操作;最后通过“exec(“soffice --headless --invisible…””方法把word转图片即可。 服务器环境:centos7 *集成环境:宝塔 我们开始给服务器安装libreoffice 直接执行下面的代码就可以…

FL Studio 21.2.3.3586 for Mac中文版新功能介绍及2024年最新更新日志

如果你正计划学习音乐制作,一款强大且易学的音乐制作软件是必不可少的。由于很多小伙伴对音乐制作软件没有实际体验过,到底选择哪一款软件最合适成为当下最纠结的问题。 这里为大家推荐一款功能强大且适合新手小伙伴的音乐编曲软件—FL Studio 21.2.3.35…

nginx 模块 高级配置

目录 一、高级配置 1.1. 网页的状态页 1.2.Nginx 第三方模块 ehco 模块 打印 1.3.变量 1.3.1 内置变量 1.3.2自定义变量 1.4.Nginx压缩功能 1.5.https 功能 1.6.自定义图标 一、高级配置 1.1. 网页的状态页 基于nginx 模块 ngx_http_stub_status_module 实现&…

The authenticity of host ‘github.com (20.205.243.166)‘ can‘t be established.

1、运行git clone报错: The authenticity of host github.com (20.205.243.166) cant be established. ECDSA key fingerprint is SHA256:p2QAC1TJYererOttrVc98/R1BWERWu3/LiyFdHfQM. Are you sure you want to continue connecting (yes/no/[fingerprint])? 这个…

【盲源分离】快速理解FastICA算法(附MATLAB绘图程序)

今天讲一个在信号分析领域较为常用的一个方法,即盲源分离算法中的FastICA。 我们先从一个经典的问题引入。 一、鸡尾酒舞会问题 想象一下,你身处一个熙熙攘攘的鸡尾酒舞会中。四周回荡着各种声音:笑声、交谈声、玻璃碰撞声,甚至…

物联网常见协议之MQTT 详解

一、简述 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上&#xff0c…

基于PostgreSql操作空间数据Geometry类型

一、简介 空间数据是指用来表示空间实体的位置、形状、大小及其分布特征诸多方面信息的数据,它可以用来描述来自现实世界的目标,它具有定位、定性、时间和空间关系等特性,操作空间数据主要是指对点、线、面等基本结构的一个操作。 在Postgre…

javaEE图书馆自习室订座系统信用springmvc+springboot+mybatis

研究的内容是设计和实现图书馆自习室系统,便捷广大师生对自习室的使用,协助图书馆自习室管理。在设计过程中,系统的用户角色和权限分配如下: (1)馆长 用户管理:拥有自习室管理员、普通用户的所有…

如何准确获取PDF文件中的标题

想要在PDF文件中,解析获取全部的标题,是一件比较麻烦的事情。正是因为PDF文件中的内容可能是五花八门的格式(论文、财报、法律条文、图书、报纸、等等)。 但是获取标题信息,又是一件非常重要的事情。标题中往往蕴含着非…

优雅使用前端枚举Enum,符合国标的那种!

01、什么是枚举Enum? 枚举Enum是在多种语言中都有的一种数据类型,用于表示一组特定相关的常量数据集合,如性别(男、女)、数据状态(可用、禁用)、垂直对齐(顶端、居中、底部&#xff…

AD9226 65M采样 模数转换

目录 AD9220_ReadTEST AD9220_ReadModule AD9226_TEST_tb 自己再写个 260M的时钟,四分频来提供65M的时钟。 用 vivado 写的 AD9226_ReadTEST module AD9226_ReadTEST( input clk, input rstn,output clk_driver, //模块时钟管脚 input [12:0]IO_data, //模块数…

golang 函数式编程库samber/mo使用: Future

golang 函数式编程库samber/mo使用: Future 如果您对samber/mo库不了解, 请先阅读第一篇 Option 本节讲述Future的使用,它可以帮助我们处理异步编程问题。 示例 我们先来看看下面代码的示例, 注释解释了每一步的操作。 packa…

深度学习 精选笔记(5)多层感知机

学习参考: 动手学深度学习2.0Deep-Learning-with-TensorFlow-bookpytorchlightning ①如有冒犯、请联系侵删。 ②已写完的笔记文章会不定时一直修订修改(删、改、增),以达到集多方教程的精华于一文的目的。 ③非常推荐上面(学习参考&#x…

spring自定义事件监听器

1. 创建自定义事件 import org.springframework.context.ApplicationEvent; import java.util.List;public class CollectionCreateEvent extends ApplicationEvent {private List<String> fileList;public CollectionCreateEvent(Object source,List<String> file…

vscode——本地配置(C和C++环境配置)(2)

vscode——本地配置&#xff08;2&#xff09; 配置C语言编译看看.json文件编译多个C文件C/C调试 今天我们继续来看vscode的配置&#xff0c;如果没看过上一次的文章&#xff0c;大家可以点击&#xff1a; https://blog.csdn.net/qq_67693066/article/details/136315696 配置C语…

【漏洞复现】鸿运(通天星CMSV6车载)主动安全监控云平台存在敏感信息泄露漏

漏洞描述 鸿运(通天星CMSV6车载)主动安全监控云平台实现对计算资源、存储资源、网络资源、云应用服务进行7*24小时全时区、多地域、全方位、立体式、智能化的IT运维监控,保障IT系统安全、稳定、可靠运行。 免责声明 技术文章仅供参考,任何个人和组织使用网络应当遵守宪法…