Q&A——内存管理(一)

TensorFlow.js部署问答模型:纯前端离线Q&A系统实战 问答系统(Question Answering)是自然语言处理的基础任务之一,其核心原理是通过预训练语言模型对给定上下文进行语义理解与答案抽取。随着边缘智能兴起,将模型部署至浏览器端成为提升响应速度、保障数据隐私与支持离线场景的关键路径。TensorFlow.js作为主流前端AI推理框架,支持WebGL/WebAssembly加速与权重量化,使BERT类抽取式问答模型可在终端高效运行。本文聚焦于DistilBERT微调模型的TF.js转换、Vite工程集成、App Platform静态托管与CDN优化等生产 阅读详情

内存管理

Q1:如图,在Editor中查看Profiler里的内存详细信息,发现Used Total中有个“Unity”,请问是什么意思?为什么会特别大?

UWA Tech Doc

在Editor中运行时,“Unity”大是正常的,因为在Editor中运行项目时,引擎包含了所有的资源占用的内存(除了部分纹理和Mesh是在GFX中),同时自身会进行很多的辅助操作来记录各种游戏运行信息。一般来说,在查看游戏运行时的真实消耗内存,我们均是推荐直接在发布游戏上通过Profiler进行查看,在Editor中运行游戏所看到的内存是要大很多的。


内存管理

Q2: 在进行内存优化时,Unity Profiler给出的数据和Android系统(adb dumpsys meminfo,已经考虑memtrack的影响 )的数据差距较大(已经分析了Profiler自身的内存占用),如何分析这部分差异,比如包括对显存消耗进行准确统计,OS消耗的统计等等?

内存差异较大是正常的,一般来说,Profiler统计的内存较为一致,而Android系统通过ADB反馈的PSS、Private Dirty等值则是差别很大。这主要是因为芯片和OS的不同而导致。具体的Android内存,建议直接查看Google Android OS的相关文档。
Unity Profiler反馈的则是引擎的真实物理使用内存,一般我们都建议通过Profiler来查看内存是否存在冗余、泄露等问题。

内存管理

Q3:System.ExecutableAndDlls占内存巨大,且一直在增长,这个属于正常情况吗?

System.ExecutableAndDlls该项显示的是执行文件和所调用的库(物理、渲染、IO等系统库)的总和。开发团队不用太担心该选项的数值,因为很多应用均在共用这些库,并且它对于真实项目的内存压力非常小,几乎没有影响,而且OS也不会因为该内存而杀掉游戏或应用。


内存管理

Q4:已经预加载怪物,然后显示怪物 PSS上升,并且在隐藏怪物后并没有下降,这是什么原因导致?显存上去了吗?

仅仅隐藏怪物的话,内存是不会下降的。因为隐藏只是改变了GameObject的状态,并没有对内存中的Object和资源进行移除。同时,即使是提前加载了怪物,也依然可能存在以上问题,因为某些资源是在显示的时候,才会传输一份到GPU的,比如Mesh。一般情况下,显存都不会即刻降低,这个是由Graphics Driver来管理的。建议可以看Profiler是否增长,如果Profiler没有问题而PSS持续增长,就有可能发生了内存泄露。

对于这个问题,建议查看性能优化,进无止境---内存篇(下)加深理解。


内存管理

Q5:我们在美术制作时做了40根骨骼,但在动作中仅用到了其中的30根。这种做法和30根骨骼用到了30根相比,在蒙皮计算上会明显增加吗?(Animation经过了压缩处理)

理论上是有增加的,骨骼运算均是每个骨骼阶段的Matrix乘起来的,所以理论上会有开销。建议使用Optimize GameObejct选项,可以减少一些不必要的CPU开销。

内存管理

Q6:不太明白Profiler中ManagedHeap.UsedSize是什么,以及这个参数的意义何在?是否重要?

ManagedHeap.UsedSize是项目逻辑代码在运行时申请的堆内存,该选项只能通过优化代码来进行降低。 优化方法一般如下:

  • 尽可能地复用变量,减少new的次数;
  • 使用StringBuilder代替String连接,使用for代替foreach;
  • 对于局部变量或非常驻变量,尽可能使用Struct来代替Class。

ManagedHeap.UsedSize过大,一方面可能会影响一次GC的耗时;另一方面也可能反映出脚本中不合理的GC Alloc。

内存管理

Q7:在UWA的帮助下,我们追踪到了一个Reserved GFX的内存占用,并且显示比较高。我们应当如何降低该内存占用呢?

一般来说,Reserved GFX 中的内存,主要是纹理和网格资源,可以尝试对纹理格式进行检测,尽可能使用硬件支持的压缩纹理;而对于网格资源,则可以从减少顶点或者顶点属性入手。 具体信息也可以查看UWA文档。

另外,更重要的是检测纹理和网格资源是否存在冗余(多份一样的资源)或者泄露(比如,主城中的大纹理出现在战斗场景中),这是需要极力避免的。关于资源冗余、内存泄露,开发者可以参考我们之前的文章《 性能优化,进无止境---内存篇(下)》。

内存管理

Q8:如果一个模型对应Skinned Mesh Renderer实例,那其所占的内存会随着角色增加而增长么 ?

简单地从一个角色Prefab实例化(Instantiate)出多个实例时,Mesh并不会出现多份(这个行为与其他资源是一致的,包括Texture,AnimationClip,Material等等)。如果在内存中发现多份,可以考虑从项目中AssetBundle的加载方式入手,因为即使是同一个AssetBundle中的同一个角色Prefab,如果被反复进行“加载-实例化-卸载”操作,依然是会导致Mesh出现多份的(当然其他的资源也是一样)。

内存管理

Q9:我们的游戏玩了20分钟后,Texture2D的内存涨到了60MB多,并且重复的资源很多,是否由于没有卸载完全?还是打包AssetBundle依赖性的问题?用的是UGUI。

UWA Tech Doc

UWA Tech Doc

存在如下两个原因:
1、AB依赖关系打包存在问题,即atlas没有被依赖打包;
2、加载卸载的管理问题,可能是加载了一次后被一个Container索引了,这时又加载了一次同样的AssetBundle又被索引。如果这些一直没有释放,也会出现这种情况。

内存管理

Q10:我们在UWA报告中看到有拼合粒子系统和未拼合粒子系统,请问如何拼合粒子系统?有没有什么规则呢?
UWA Tech Doc

粒子系统的Draw Call动态拼合与半透明物体的动态拼合机制相当(粒子基本都是半透明材质)。而对半透明物体,由于其渲染顺序的限制(必须从后向前渲染,以保证渲染结果的正确性),动态拼合只能对渲染顺序相邻且材质相同的物体有效。而在决定半透明物体的渲染顺序时,Unity首先会按Shader中的RenderQueue进行排序;其次(相同RenderQueue时),会根据每个半透明物件到屏幕的距离,距离大的优先渲染。
因此,需要尽可能地将相同材质的粒子系统放在比较接近的深度下,才能更多地使动态拼合生效。但通常由于相机的运动、粒子系统的分散分布等原因造成粒子系统之间的穿插,能够动态拼合的数量往往都是很少的,所以我们在粒子系统模块看到的开销分布通常类似该图,主要都是未拼合粒子系统造成。


精通iOS开发:The Complete Friday Q&A_ Volume I 在移动应用开发领域,特别是针对苹果生态的iOS平台,掌握Cocoa和CocoaTouch是每一位开发者不可或缺的基础技能。本章旨在为读者提供一个深入的技术概览,以便更好地理解后续章节中涉及的技术点。URL Loading System 是iOS中一个使用网络资源的重要机制,它允许应用加载远程URL的内容或者在应用之间共享数据。这一系统的底层是由CFNetwork框架实现的,但Cocoa提供了更高层次的抽象。在进行网络编程时,开发者通常会与URLSession和它的代理打交道。 阅读详情

相关推荐

Vivado IP核与License许可全解析:从免费到收费,从评估到部署

本文全面解析Vivado IP核与License许可机制,从免费到收费IP核的选型指南到License的申请与部署策略。详细介绍了Xilinx官方IP核的优势与局限,第三方IP核的风险与应对,以及实战中的资源优化技巧和版本兼容性问题,帮助开发者高效利用Vivado工具链。

weixin_29169505的博客 367

Unity内存优化(-)托管堆ManagedHeap的优化

很多童鞋在进行内存分析的时候都会遇到下面的问题: ManagedHeap.UsedSize和ManagedHeap.reservedUnUsedSize这两个占用了很大内存,即使手动GC.Collect之后,ManagedHeap.UsedSize和ManagedHeap.reservedUnUsedSize两者的综合仍然没有发生变化,内存占用依然没有缓解。 在分析内存时,也发现了相同

cbbbc 1万+

matlab生成blocks、bumps和doppler标准测试信号

关键函数:wnoise使用方式X = wnoise(FUN,N) [X,XN] = wnoise(FUN,N,SQRT_SNR) [X,XN] = wnoise(FUN,N,SQRT_SNR,INIT)X = wnoise(FUN,N) 返回由 FUN给出的信号,长度为2^N,幅值范围[0,1].[X,XN] = wnoise(FUN,N,SQRT_SNR) ,返回了一个测试信号X,以及一个加噪

ZSZ_shsf的博客 6582

unity内存优化准则

常见判断准则 内存阈值关注---ManagedHeap.UsedSize建议不超过20M 内存阈值关注---总体Mone建议不超过40M 内存阈值关注---Reserved Memory建议不超过150M 内存阈值关注---2D纹理建议不超过50M 内存阈值关注---Mesh大小建议不超过20M 内存阈值关注---AnimationClip大小建议不超过15M 内存阈值关注---AudioClip...

weixin_41995872的博客 1210

从入门到精通:dirmap 高级 Web 目录扫描实战指南

本文提供了一份从环境搭建到高级配置的dirmap Web目录扫描实战指南。详细解析了工具安装、核心配置文件dirmap.conf的深度调优,包括递归扫描、四种扫描模式(字典、爆破、爬虫、Fuzz)的实战应用,并演示了分阶段资产发现的完整工作流程,帮助安全人员高效发现隐藏目录与敏感文件。

rnn9storyteller的博客 482

解决uc浏览器劫持video标签问题

解决uc视频悬浮播放 ,video标签被浏览器劫持 ,vide0适配

smile_y_y的博客 3453

一些Unity 优化建议 整理(为自己)

1、 由于实时对战游戏的数据包数量巨大,早期版本的帧同步策略会导致比较明显的卡顿,通过进行数据包的合并与优化逐渐解决了卡顿问题; 2、 频繁创建和销毁的小兵对象让CPU爆表了,大量的小兵如果采用实时内存的分配和回收,会产生大量的内存碎片和系统开销,解决方法之一就是采用高效的对象池进行优化,对每个内存对象的状态进行操作即可; 3、 性能分析过程中,发现单人同屏和多人同屏时的开销都很大,通过

蛰伏--当你不够强大时,就不要放弃努力 1万+

YOLOv10改进目录一览 | 涉及卷积层、轻量化、注意力、损失函数、Backbone、SPPF、Neck、检测头等全方位改进

如何寻找创新点?为什么要使用这个模块?如何才能提升模型的精度?这是贯穿我们研究始终的问题。创新点在这个专栏中我已经整理好了,这已经省去了大部分时间,但是当我们使用这些新的模块去优化已有的模型,如何才能提升模型的精度,才是我们要达到的最终目标。当然我们可以使用传统的A+B+C的方法去堆积模块,然后是进行大量的实验去排列组合以实现最终的精度提升,这无可厚非。

Limiiiing的博客 1万+

项目优化之——内存

内存优化主要从以下几个方面入手: 1.资源内存占用;2.引擎模块自身内存占用;3.托管堆内存占用。 一、资源内存占用 1、资源冗余: 什么时候会出现内存冗余:在通过AssetBundle.Unload(false)卸载AssetBundle对象后,如果重新创建该对象并加载之前加载过的资源到内存时,会出现冗余,即两份相同的资源。 被脚本的静态变量引用的资源,在调用Resou

Patrick 763

从零开始讲DDR(8)——AXI 接口MIG 使用(1)

我们简单拆解了MIG AXI接口中测试文件的整体框架,首先在sim_tb_top.sv文件中例化了DDR模型和example_top。在example_top中,又例化了MIG IP和一个流量产生器ddr4_v2_2_8_axi_tg_top。在ddr4_v2_2_8_axi_tg_top中的主要功能是分别例化了boot_mode_gen,prbs_mode_gen,custom_mode_gen和axi_opcode_gen。

apple_53311083的博客 1594

156、手机摄像头模组结构拆解:从保护盖到 FPC 连接器的完整装配剖面

本文深入解析手机摄像头模组结构设计要点。作者结合项目经验,指出保护盖密封胶在低温收缩会导致边缘漏光问题,强调结构细节比算法参数更关键。文章逐层拆解模组组件:保护盖厚度需平衡抗冲击与光学性能;镜筒内镜片组装配顺序和公差控制直接影响成像质量;IR滤光片厚度公差±0.02mm会改变红外截止波长;CSP封装需注意金线加固;FPC连接器的信号完整性和机械可靠性设计。最后给出5条实用建议,包括密封胶选型、镜片对位检测等,强调模组结构设计是"一票否决制"的基础工程。(149字)

sundong_81的博客 107

Unity项目优化详解(持续补充ing)

Unity性能优化

Star_MengMeng的博客 5332

30天入门 SAP BTP 开发系列之八:动手在 SAP BTP 上开发第一个 ABAP 透明表

ABAP Cloud 环境下创建透明表的方法与数据迁移实践 本文介绍了在 SAP BTP ABAP 环境中创建透明表并迁移数据的完整流程。与传统的 SE11 事务码不同,ABAP Cloud 需通过 ABAP Development Tool 创建数据库表,使用代码定义表结构。作者详细演示了如何: 在开发包中创建名为 Z优快云_TRAVEL 的透明表 使用 ABAP 代码定义表字段和约束 通过 ABAP 类实现数据从标准表/DMO/TRAVEL 到新建表的迁移 验证数据迁移结果 文中还提供了相关技术概念的

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1789

Q&A——内存管理(二)

内存管理 Q1:我们在Profiler中发现了一个AssetDatabase的内存占用,其存在于Assets中,单个占用内存非常大。 请问该占用是如何发生的呢?是否可以避免? 理论上开发者在真机运行项目时是不会看到此选项的,只有在 Editor 中运行时能看到。由于在 Editor 下运行游戏时,Profiler 中获取的内存是包含了 Editor 本身占用的内存的,因此并不准确,

编程小生的专栏 367

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Q&A——内存管理(三)

内存管理 Q1:有没有办法可以减少游戏中Mono内存占用的大小?我现在读完游戏表以后就占用了60MB,我看其他游戏读完配置表也才10MB左右,这个是怎么做到的呀? 如果刚进入游戏后,Mono堆内存就达到了60MB,那么你的游戏项目极有可能在一开始加载了一个非常大的配置表。对此,我们建议出现该问题的研发团队对配置文件的初始加载进行详细检测,查看是否可以精简配置文件信息。如果不行,则尝试将

编程小生的专栏 623

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

嵌入式FreeRTOS面试Q&A-整理

首先,你能简要介绍一下FreeRTOS吗?FreeRTOS是一个流行的实时操作系统(RTOS),用于嵌入式设备。它是开源的,因此可以免费使用和修改。FreeRTOS提供了多任务处理、时间管理、中断管理等功能,非常适合资源受限的微控制器和小型处理器。

weixin_52129797的博客 1万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

操作系统Q&A

1.操作系统特点(基本特征) 答: 1)并发性: 是在计算机系统中同时存在多个程序,宏观上看,这些程序是同时向前推进的。 在单CPU上,这些并发执行的程序是交替在CPU上运行的。 程序并发性体现在两个方面: 用户程序与用户程序之间的并发执行。 用户程序与操作系统程序之间的并发。 2)共享性: 资源共享是操作系统程序和多个用户程序共用系统中的资源。 3) 随机性: 随机性是指操作系统的运行是在一个随机的环境中,一个设备可能在任何时间向处理机发出中断请求,系统无法知道运行着的程序会在什么时候做什么事情。 4)虚

weixin_39455125的博客 847

IoTDB 常见问题 Q&A 第三期

关于 IoTDB 的 Q & A IoTDB Q&A 第三期持续更新!我们将定期汇总我们将定期汇总社区讨论频繁的问题,并展开进行详细回答,通过积累常见问题“小百科”,方便大家使用 IoTDB。Q1:查询最新值 & null 数据相加方法问题现象 1如果我想查 1000 个点的最新值,这些点的设备地址可能都不相同,那么我怎么查?解决方案1. from 后面可以写多个设备2. ...

qin_DB的博客 1330

Redis Q&A

在Redis中,常见的缓冲区有下面两类:1、C-S架构中的输入输出缓冲区2、主从复制架构中的缓冲区其中:C-S架构中的缓冲区主要分为客户端输入缓冲区和客户端输出缓冲区;主从复制架构中的缓冲区主要指复制缓冲区和复制积压缓冲区。

weixin_44265650的博客 276

技术面Q&A

什么是嵌入式实时操作系统Android操作系统属于实时操作系统么 Android程序运行时权限与文件系统权限的区别 DDMS和TraceView的区别 什么情况会导致Force Close如何避免能否捕获导致其的异常 activity的数据存储的方式 android中service的实现方法 在android中简述JNI的调用过程 SIM卡的EF文件有什么作用 简述NDK是什么 android应用程

Abby同学思考的地方 750

Cocos核心开发者论坛在线Q&A(集锦一)

每周五下午的Cocos核心开发者论坛在线问答已举行8期,为方便没时间上论坛跟贴的X-Men,接下来将定期整理Q&A集锦发出(每期15条),以供浏览。明天下午3-5点,春节前最后一期论坛在线问答,有问题或吐槽快去占坑喽〜论坛问答地址请点击最下方“阅读原文”。论坛在线Q&A(集锦一)1、问:问下场景渲染有没有裁剪的概念,我们是一个横屏滚动的场景,想让没有...

Cocos的博客 190

Q&A——代码加载

代码加载 Q1:我的项目在加载过程时经常崩溃,项目加载代码如下。想请问这种写法是否存在问题,是否会导致崩溃? 首先,崩溃还是要看具体崩溃log,看看到底是哪里崩溃,定位真正的崩溃原因(说不定看完后还不是加载的问题)。其次,来谈谈代码的问题,一共有三点需要研发团队考虑: (1)代码中通过For循环开启一个Coroutine,通过WWW加载AB,然后保存www.bytes

起个名字好难啊 690

C\C++中的malloc和new Q&A

有关malloc和new的详细解释 Q1:void *指针和普通的指针有什么区别? Q2:malloc中动态分配的自增到底是什么样的自增? Q3:new运算符怎么实行动态分配的? Q4:所申请的空间 动态分配失败是怎么回事? Q5:malloc和new所申请的空间不用时是怎么样销毁的? PS:本日linux学习笔记 ...

XIQI_1的博客 213
上一篇: NGUI开发优化技巧(下)
下一篇: Q&A——资源管理(一)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值