关于memory:UnreadableMesh内存占用翻倍问题

1)Unreadable-Mesh内存占用翻倍问题2)在TMP中计算书名号《》高度的问题3)Mipmap如何限定层级4)FMOD设置中对于Virtual Channel Count&Real Channel Count的参数疑难 这是第374篇UWA技术常识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地把握和学习。 UWA社区主页:community.uwa4d.comUWA QQ群:465082844 MemoryQ:最近在做性能剖析时发现Mesh内存占用异样,局部Mesh在未开启Readable的状况下也不会卸载CPU局部的内存开销。 通过Mesh文件比照发现是m_KeepVertices与m_keepIndices参数差别导致: 查问到网络上的局部源码,发现该参数的确会影响内存开释。 已尝试通过批改文件的形式与SerializedObject的形式去批改这个值,都无奈保留,Unity外部会自行修改。请问有谁晓得它具体的实现细节,什么样的Mesh数据会导致它会保留CPU端所有数据,以及有何提前躲避的形式? A:可能是网格设置了动态合批导致的,能够试下关掉动态合批看下这部分内存是否被卸载。感激宗卉轩@UWA问答社区提供了答复 UIQ:如下图所示,输出的文字中有书名号,但应用ContentSIzeFitter计算失去的高度是谬误的(貌似它计算的比理论少,导致没换行): 而应用默认的Text就没这个问题(雷同的字体): 请问如何在TMP中计算书名号《》的高度? 针对以上问题,有教训的敌人欢送转至社区交换分享:https://answer.uwa4d.com/question/65c1d43b40a8d93b624afcce AssetQ:请问Mipmap如何限定层级? 比方一张1024x1024纹理,共有Mipmap0~10,然而我的项目只用到Mipmap0~2,如何省略掉3~10? 针对以上问题,有教训的敌人欢送转至社区交换分享:https://answer.uwa4d.com/question/65c0a61340a8d93b624afccc AudioQ:FMOD的设置中,我发现有两个设置选项:Virtual Channel Count和Real Channel Count。想求教一下,个别游戏我的项目内这两个值要设置多少才适合?我发现外网有人都是拉满的,但这会造成CPU累赘。只晓得Real Channel Count这个不能太高。所以想理解下通常这俩参数设置多少比拟正当。 下图来自外网论坛,Virtual Channel Count设置为512、Real Channel Count设置为128,而我的我的项目中这俩设置为128、32。 针对以上问题,有教训的敌人欢送转至社区交换分享:https://answer.uwa4d.com/question/65c0b00840a8d93b624afccd 封面图来源于网络 明天的分享就到这里。生有涯而知无涯,在漫漫的开发周期中,咱们遇到的问题只是冰山一角,UWA社区愿伴你同行,一起摸索分享。欢送更多的开发者退出UWA社区。 UWA官网:www.uwa4d.comUWA社区:community.uwa4d.comUWA学堂:edu.uwa4d.com官网技术QQ群:465082844

February 20, 2024 · 1 min · jiezi

关于memory:故障分析-数据库服务器内存不足一例分析

作者:付祥 现居珠海,次要负责 Oracle、MySQL、mongoDB 和 Redis 保护工作。 本文起源:原创投稿 *爱可生开源社区出品,原创内容未经受权不得随便应用,转载请分割小编并注明起源。 景象监控告警某台机器闲暇内存低于10%,执行top命令,按内存降序排序,局部输入如下: [root@mysql-slaver ~]# toptop - 13:45:43 up 1835 days, 20:52, 2 users, load average: 0.02, 0.03, 0.05Tasks: 210 total, 1 running, 208 sleeping, 1 stopped, 0 zombie%Cpu(s): 0.5 us, 0.6 sy, 0.0 ni, 98.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 stKiB Mem : 32780028 total, 905684 free, 19957900 used, 11916444 buff/cacheKiB Swap: 0 total, 0 free, 0 used. 3448260 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2677 mysql 20 0 20.1g 15.1g 3392 S 0.0 48.2 430:17.58 mysqld 10549 polkitd 20 0 3277476 3.1g 632 S 0.3 9.9 146:47.24 redis-server 18183 root 20 0 877308 215868 1892 T 2.7 0.7 2736:45 xxxxxx 442 root 20 0 160244 93016 88552 S 0.3 0.3 314:14.86 systemd-journal 32537 root 20 0 731620 58360 54588 S 0.3 0.2 29:09.61 rsyslogdtotal=32G,used=19G,buff/cache=11G,available=3G,最耗内存过程为 MySQL、Redis,总计约18.2G,其余过程占用内存都比拟低,buff/cache 内存中只有3G是无效的,残余8G内存去哪里? ...

April 18, 2023 · 3 min · jiezi

关于memory:TMP耗时较高的优化问题

1)TMP耗时较高的优化问题2)Unity重载Object后,如何断定物体是否为空3)SRP Batch在增加unity_SpecCube后的问题4)堆内存会持续上升,如何用UWA报告来剖析 这是第326篇UWA技术常识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地把握和学习。 UWA社区主页:community.uwa4d.comUWA QQ群:465082844 TextMeshProQ:咱们我的项目中UGUI的Canvas.SendWillRenderCanvases耗时高时常常看到子节点TMP.GenerateText和TMP Parse Text耗时高。根本能定位到是角色对话字母跳字的时候,然而这是硬需要不好改。大佬们有没有什么思路优化一下? A1:倡议独自给这块开Canvas。感激欧月松@UWA问答社区提供了答复 A2:角色对话时字幕上一个一个字蹦出来的确是比拟常见的需要了,都是在一个Text组件里变动,而且字越多顶点数就越高,耗时就比拟可观了。 我想到的一个思路还是改用动态字体图集。可参考:https://answer.uwa4d.com/question/63e30f3b0638540599016732 我之前也遇到这个问题,所以做了下试验:在一个Text组件里用代码管制间断输入3000个中文字符集中各不相同的文字。在Profiler中察看到: 当应用动静字体时,每输入一个字符都会在相应的TMP动静图集纹理资源中新画入一个字符,在Unity 2021、TMP 3.0.6版本环境下,输入到最初几个字符时,Canvas.SendWillRenderCanvases耗时来到24ms左右。过后在用动态字体时,同样的输出形式和环境下,输入到最初几个字符时,Canvas.SendWillRenderCanvases耗时升高到14ms左右。在还有一些补充测试中,耗时差距在真机上被进一步放大;而且在一些较低的稳固版本的Unity和TMP环境中试验后果也差不多。这里就不一一列进去了。总之,足以阐明应用动态字体计划在耗时层面也是具备优越性的。 感激Faust@UWA问答社区提供了答复 ScriptQ:Unity重载Object的 == 后,如何真的断定物体是否为空? Unity中还找不到除了Try Catch外,去辨别Destroyed的物体和null的区别。一些资源追踪操作,能够查看Destroyed的物体,比方:取得Destroyed物体的InstanceID,去辨认到底具体出问题的货色是什么。然而如果应用真null的物体调用这类接口,就会出现异常。 当初想找一个,不触发异样的洁净办法,断定一个物体是被捣毁,还是真null。 A:简略的写法:真null的判断:(go as object) == null;如果不是真null,能够持续判断是不是Destroyed:(go as UnityEngine.Object) == null。该答复由UWA提供 RenderingQ:SRP Batch在增加unity_SpecCube相干参数后,呈现 "builtin property offset in cbuffer overlap other stages"。 其实是之前问题的具体情况。在反对SRP Batch的Shader增加反射探针相干参数后:如果把探针参数放在UnityPerDraw外面,测试多种参数程序,都会呈现 "builtin property offset in cbuffer overlap other stages"问题;然而放在UnityPerDraw外,又会呈现提醒要求把相干参数放进外面去。 当初集体想法是,这些参数应该放进UnityPerDraw内,然而具体程序有问题。不晓得有没有胜利植入测试的例子。或者是对源码有了解的兄弟能够给出一个可行的程序。 具体呈现问题的版本是2020.3.16f1。 我的项目现有问题倒是通过将相干参数放在CBuffer外,外加强制裁减变体,在测试到的环境中解决了。然而还是心愿可能解决这个深层次的坑。 A:明天也遇到这个问题了,看了下源码,这些Built-in Feature,例如反射探针或者Motion Vector,Unity是有一个Feature List来解决的,每当你开启一个Feature,会在UnityPerDraw调配一个Block,而后你新退出的参数必须跟这个Block大小匹配。 我的问题是Motion Vector只用到了一个矩阵和一个float4,然而Unity给调配的大小就是两个矩阵+一个float4,所以如果要不影响合批,就得这么申明。 你的状况感觉能够增加到probeVolume这个Feature的Block里,Catlike教程里也有提过,测了下程序不要紧,大小统一就行,3个float4和一个矩阵。 感激xltqM7stGjuG@UWA问答社区提供了答复 MemoryQ:大佬们问一下,咱们我的项目的堆内存会持续上升到400多MB,这个值太高了,而UWA报告中无论是平均分配值乘以帧数还是泄露剖析中的驻留量尽管也很高,然而离400MB还有一些差值。到这里不晓得怎么持续剖析了,有没有好的倡议? A:2022年底帮一个我的项目解决了内存始终涨的问题,起因也是内存碎片。刚开始认为是资源出的问题,始终用Memory Profiler在定位问题,只能看到Empty Heap Space始终在涨,到最初发现这个工具找不到起因,然而大略确定了是内存碎片太多。最初通过GC Allocated的变动定位了局部性能。 在这个过程中发现了Profiler里的波形和数值有时候是对不上的,明明有一个很大的波峰,但数据显示基本不对,这时通过这条波峰是定位不到性能代码的。 ...

March 2, 2023 · 1 min · jiezi

关于memory:在Runtime下IL2CPP与Mono打包对应的PSS内存占用问题

1)在Runtime下,IL2CPP与Mono打包对应的PSS内存占用问题2)取得AssetBundle外部依赖关系的办法3)Unity 2019 Streaming Mipmap在某些状况下采样等级谬误4)依据RenderDoc的数据,计算渲染量 这是第322篇UWA技术常识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地把握和学习。 UWA社区主页:answer.uwa4d.comUWA QQ群:465082844 MemoryQ:IL2CPP打包比Mono打包在Runtime下跑同样的案例PSS内存占用更高一些,请问是正当的吗? A:揣测可能是IL2CPP包是64位的,而Mono包是32位的,人造内存占用就会高一些,另外IL2CPP在打包的时候,会把各种泛型的代码给开展,所以对应的代码so加载进内存,内存占用也会高一些。 上面是同样的测试案例,两种打包形式的PSS占用截图。 Mono包: IL2CPP包: 从上图中能够看到,IL2CPP包比Mono包内存占用更多的体现在Code、Native Heap和Private Other三个类别上。 感激Xuan@UWA问答社区提供了答复 AssetBundleQ:取得AssetBundle外部依赖关系的办法。注:Manifest的依赖关系不精确。 之前发现从Manifest外面取得的依赖关系在很多状况下都不精确。 比拟显著的是,当Prefab嵌套时,Manifest数据会显示Prefab依赖被嵌套的Prefab;而SpriteAtlas和Sprite依赖关系是反的。其余还有很多状况会额定依赖不须要的资源。用WebExtract解开AssetBundle自身,外面的数据是正确的依赖数据。 因而,当初想找到一个办法,脱离Manifest,自行建设依赖关系表。 当初的问题在于,如果对每个输入的AssetBundle执行解包和正则剖析,会破费大量工夫,并且自身文本匹配也有危险。 有没有什么洁净的流程,能够取得AssetBundle外部记录的依赖关系? A:用UnityEditor.Build.Content.ContentBuildInterface上面的办法获取到的依赖信息是精确的。如上面两个函数:ContentBuildInterface.GetPlayerDependenciesForObjectsContentBuildInterface.CalculatePlayerDependenciesForScene 如果用SBP,Manifest能够在编译实现后加个Task读m_DependencyData,本人建设一个。或者间接用ContentBuildInterface预结构的也能够满足了。 感激题主欧月松@UWA问答社区提供了答复 TextureQ:游戏应用了Mipmap技术,同时为了节俭内存开启了流式加载Streaming Mipmap: 然而在做热更模型的时候,发现某些贴图的Mipmap会采样一个很低的值(很糊),而后即使调整摄像机远近也没有变动(不能动静采样了)。 失常打包进去的资源没有问题(贴图在一个独立Bundle里),但热更打出了的资源就有问题(模型、材质、贴图等都在一个Bundle里),而且贴图占用内存未达到Budget下限。 不晓得问题出在哪了,该如何解决? A:依据形容剖析,有可能是加载了贴图之后把Bundle卸载了。把贴图放在独自的Bundle外面的时候,可能这个Bundle没有被卸载;但在热更的时候,贴图和模型、材质等放在同一个Bundle,可能用代码加载这个Bundle之后又卸载了,就会呈现这个问题。 Streaming零碎刚开始加载的时候会加载分辨率较低的一层Mipmap,之后依据间隔动静调整,如果此时曾经把贴图所在的Bundle卸载了,就无奈依据摄像机间隔调整采样的Mipmap层级。 感激龙粲@UWA问答社区提供了答复 RenderingQ:最近在剖析几款游戏的特效。曾经用RenderDoc抓了几帧。也找到了渲染粒子特效的Pass。 当初问题,是否从顶点Buffer中剖析出粒子的数量?或者有无别的办法估算出粒子的数量? A:如下图,如果是四边形的粒子,比方billboard,66/3=22个三角形,22/2=11个粒子。 感激Xuan@UWA问答社区提供了答复 封面图来源于网络 明天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题兴许都只是冰山一角,咱们早已在UWA问答网站上筹备了更多的技术话题等你一起来摸索和分享。欢送酷爱提高的你退出,兴许你的办法恰能解他人的当务之急;而他山之“石”,也能攻你之“玉”。 官网:www.uwa4d.com官网技术博客:blog.uwa4d.com官网问答社区:answer.uwa4d.comUWA学堂:edu.uwa4d.com官网技术QQ群:465082844

February 1, 2023 · 1 min · jiezi

关于memory:如何优化so-mmap内存占用

1)如何优化.so mmap内存占用2)模拟器下物理碰撞生效3)Unity RenderTexture的开释在安卓上并不能使GL内存齐全回落4)数字人中,怎么做到胡子固定在嘴巴皮肤上 这是第319篇UWA技术常识分享的推送。明天咱们持续为大家精选了若干和开发、优化相干的问题,倡议浏览工夫10分钟,认真读完必有播种。 UWA 问答社区:answer.uwa4d.comUWA QQ群:465082844 MemoryQ:我的项目PSS内存过高,应用adb指令抓取内存形成,发现.so mmap局部达到了180MB。这块有没有优化倡议? A1:能够从以下三个方向查一下: 泛型Template用的是否较多自动化生产的代码是否较多Lua生产的Wrapper代码是否较多感激小ben@UWA问答社区提供了答复 A2:还有以下两点: 删除无用插件、代码IL2CPP是否进行裁剪感激郑骁@UWA问答社区提供了答复 PhysicsQ:在雷电模拟器下,有大概率车与动态创建物体没碰撞,然而很奇怪的是某些雷同Layer有的能够碰撞。 前面间接空场景打包模拟器运行,创立cube + rigidbody赋值不同Layer模仿,有时候是有的Layer之间全副没有碰撞,还会呈现同一个运行每次会碰撞的Layer都不一样。 查了好久没啥思路,有没有大佬遇到类似问题? 以上问题有哪位大拿也已经做过相似的测试,欢送转至社区交换分享:https://answer.uwa4d.com/ques... MemoryQ:Unity RenderTexture的开释在安卓上并不能使GL内存齐全回落? Unity版本:2020.3.21.f1测试机:HUAWEI P30内存统计工具:Perfdog 问题详情:状况1:创立RT并立即卸载,此时GL内存齐全回落。状况2:创立RT不卸载,此时GL回升并稳固。再创立RT并立即卸载,此时GL回升,但回落时(也有可能不回落)不会回到之前地位,会有一部分残留,相似于透露的状况。想请问下为什么会产生这种状况? 我搭建了一个测试场景,次要测试了两个函数,第一个函数只生成RT不卸载、第二个函数生成RT并立即卸载。 在真机上测试后果: 能够看到前三次,调用办法2对应了状况1,此时内存回落失常。但在调用办法1后再调用办法2,则会产生内存无奈回落到原地位的状况。 目前查到的材料:参考了UWA上的一篇文章《分享一次查找GfxDriver内存暴涨的经验》 外面是这样解释的: 对于GL显存,外面说到回落不到原地位的起因是只卸载了Main Memory,而不卸载Pinned Memory,那有什么办法卸载掉Pinned Memory使内存齐全回落的办法吗? 我对Main Memory和Pinned Memory具体是什么不太理解,想求教一下大家。 以上问题有哪位大拿也已经做过相似的测试,欢送转至社区交换分享:https://answer.uwa4d.com/ques... AnimationQ:数字人中,怎么做到胡子固定在嘴巴皮肤上?口型管制利用时,胡子怎么跟着嘴巴皮肤同步静止变形? A:在数字人模型中,胡子的静止变形能够通过在嘴巴皮肤模型上增加骨骼来实现。首先,您须要在嘴巴皮肤模型上创立一些骨骼,并将它们附着在相应的地位。而后,您能够应用骨骼动画性能,在口型管制时通过管制骨骼的静止来实现胡子的追随变形。 为了保障胡子可能固定在嘴巴皮肤上,您能够在创立骨骼时,在骨骼根部和嘴巴皮肤模型之间增加控制点(Control Point)。控制点能够用来连贯骨骼和嘴巴皮肤,并使得骨骼的静止对嘴巴皮肤产生影响。通过增加控制点,您就能够在保障胡子固定的同时,让胡子可能随着嘴巴皮肤的变形而变形。 感激Hyhom@UWA问答社区提供了答复 封面图来源于网络 明天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题兴许都只是冰山一角,咱们早已在UWA问答网站上筹备了更多的技术话题等你一起来摸索和分享。欢送酷爱提高的你退出,兴许你的办法恰能解他人的当务之急;而他山之“石”,也能攻你之“玉”。 官网:www.uwa4d.com官网技术博客:blog.uwa4d.com官网问答社区:answer.uwa4d.comUWA学堂:edu.uwa4d.com官网技术QQ群:465082844

January 5, 2023 · 1 min · jiezi

关于memory:MongoDB-查看索引与存储大小qbit

前言本文试验环境为 3 台机器的 MongoDB 正本集Using MongoDB: 5.0.5Using Mongosh: 1.1.8官网文档:https://www.mongodb.com/docs/...注释列出所有数据库> db.getMongo().getDBs()查看单个库的统计信息以下统计信息是每台机器上的统计信息,不是3台机器的和。totalSize = storageSize + indexSize> db.getMongo().getDB('pubmedjournal').stats(){ db: 'pubmedjournal', collections: 3, views: 0, objects: 44928355, avgObjSize: 36032.49960482639, dataSize: 1618880933783, storageSize: 510386745344, // 每台机器上document占用磁盘空间总大小 freeStorageSize: 12275736576, indexes: 13, indexSize: 8714760192, // 每台机器上index占用磁盘空间总大小 indexFreeStorageSize: 993247232, totalSize: 519101505536, // 每台机器上占用磁盘空间总大小 totalFreeStorageSize: 13268983808, scaleFactor: 1, fsUsedSize: 9056225865728, fsTotalSize: 11680169852928, ok: 1, '$clusterTime': { clusterTime: Timestamp({ t: 1667097728, i: 16 }), signature: { hash: Binary(Buffer.from("c787785abf50320f6620c282fbb5b1e080304032", "hex"), 0), keyId: Long("7106121282126610433") } }, operationTime: Timestamp({ t: 1667097728, i: 16 })}列出单库下的 collection> db.getMongo().getDB('pubmedjournal').getCollectionNames()[ 'publisher', 'article_data', 'article' ]单个 collection 的统计信息> collStats = db.getMongo().getDB('pubmedjournal').getCollection('article').stats()> collStats.storageSizeLong("496281411584")> collStats.totalIndexSizeLong("6650699776")> collStats.totalSizeLong("502932111360")正本集上所有数据库的统计之和留神这里也是1份数据的统计值,正本集3份数据之和。 ...

October 30, 2022 · 1 min · jiezi

关于memory:ParticleSystem的内存会受到MaxParticles影响吗

1)ParticleSystem的内存会受到MaxParticles影响吗2)应用代码批改图片压缩格局报错3)Unity纹理导入设置对内存影响4)Unity中视频播放的解决方案 这是第285篇UWA技术常识分享的推送。明天咱们持续为大家精选了若干和开发、优化相干的问题,倡议浏览工夫10分钟,认真读完必有播种。 UWA 问答社区:answer.uwa4d.comUWA QQ群2:793972859(原群已满员) MemoryQ:ParticleSystem的内存会受到MaxParticles设置的数值影响吗? A:在真机上做了一个测试,Unity 2020.3.17,小米9。测试的特效是Unity默认的ParticleSystem特效,后果如下: 从下面的图上能够看到,内存受到“理论最多粒子数量”的影响,(能够大概了解为持续时间*每秒发射数量,不思考Burst的发射形式)。当发射数量为0时,ParticleSystem也是有9416Byte的内存占用,这个是Unity内置的各种序列化的货色的占用。 另外,当“理论最多粒子数量”确定后,Active的粒子数随着播放工夫增长越来越多,内存占用是不会变的,如下图所示。 PS:当ParticleSystem发射的是Mesh时,会造成Gfx内存回升,且这个Mesh内存占用是不统计到Assets/Mesh内存占用中的。 感激Xuan@UWA问答社区提供了答复 TextureQ:想新增图片时,自动化解决图片的设置,后果设置图片时报错了,网上也没有找到解决方案,谬误如下:Selected texture format ‘Unsupported’ for platform ‘Android’ is not valid with the current texture type ‘Sprite’。 Unity版本:2019.4.34f1 public class TextureImporterProcessor : AssetPostprocessor{ void OnPostprocessTexture(Texture2D texture) { bool haveAlpha = textureImporter.DoesSourceTextureHaveAlpha(); textureImporter.isReadable = false; textureImporter.mipmapEnabled = false; textureImporter.alphaIsTransparency = haveAlpha; textureImporter.textureType = TextureImporterType.Sprite; textureImporter.textureCompression = TextureImporterCompression.Compressed; TextureImporterPlatformSettings androidSettings = new TextureImporterPlatformSettings() { name = "Android", overridden = true, format = haveAlpha ? TextureImporterFormat.ASTC_RGBA_6x6 : TextureImporterFormat.ASTC_RGB_6x6, }; textureImporter.SetPlatformTextureSettings(androidSettings); TextureImporterPlatformSettings iOSSetting = new TextureImporterPlatformSettings() { name = "iPhone", overridden = true, format = haveAlpha ? TextureImporterFormat.ASTC_RGBA_6x6 : TextureImporterFormat.ASTC_RGB_6x6, }; textureImporter.SetPlatformTextureSettings(iOSSetting); textureImporter.SaveAndReimport(); }}A1:可能是纹理格局的问题,我这边把ASTC_RGBA_6x6改成ASTC_6x6就没有这个报错了。感激宗卉轩@UWA问答社区提供了答复 ...

February 14, 2022 · 1 min · jiezi

关于memory:UGUI和粒子特效的穿插使用问题

1)UGUI和粒子特效的交叉应用问题2)我的项目导入多个Spine动画合批后升高DrawCall问题3)Font Texture占用内存问题4)Unity Texture Streaming的疑难 这是第261篇UWA技术常识分享的推送。明天咱们持续为大家精选了若干和开发、优化相干的问题,倡议浏览工夫10分钟,认真读完必有播种。 UWA 问答社区:answer.uwa4d.comUWA QQ群2:793972859(原群已满员) UGUIQ:UGUI中粒子在滑动列表中应用时,须要将特效放在两个Image两头展现,如果将高低两个Image与特效都加Canvas后,滑动列表的Mask就不会起作用,有什么好方法吗? A1:举荐一个不错的开源我的项目:Particle Effect For UGUI感激张首峰@UWA问答社区提供了答复 A2:我也举荐一个不错的计划:UIEffect感激马三小伙儿@UWA问答社区提供了答复</font> RenderingQ:我的项目中应用到了Spine插件,在场景中应用了大量的Spine动画,每一个动画就是一个DrawCall,场景应用60个动画就是同时存在60个DrawCall,有没有方法将其合批到一次或者几次绘制? Spine动画都是这样的: A:这里提供一种可能可行的方法:我的项目降级到URP,应用SRP Batcher对Spine进行合批。 首先在内置的渲染管线中,我在场景中复制了完全相同的10个的Binary导出的Spine和10个Json导出的Spine。如图,连齐全Copy的Spine动画都无奈合批: 那URP如何操作呢?不是所有的对象都能够应用SRP Batcher来渲染,Shader必须与SRP Batcher兼容。但默认的URP工程中并没有封装Spine应用的Shader。所以,Spine官网提供了对URP的反对:http://zh.esotericsoftware.co...。 下载官网提供的UPM包、通过PackageManager装载到应用Spine的URP我的项目中: 在URP的我的项目里,把测试用例稍作批改:我导入了两个图集、材质等因素齐全不同的Spine(Spineboy和Hero),来测试不同的Spine能不能被SRP Batcher合批。 资源导入结束后,把原来Spine资源的Shader改为URP版本的Shader。如下图,“Spine/Skeleton”改为了“Universal Render Pipeline/Spine/Skeleton”: 批改完后,查看Frame Debugger,所有的Spine的渲染都合并成一个Batch了,阐明SRP Batcher岂但能合批反复的Spine动画,更能使齐全不同的Spine动画合批。 感激Faust@UWA问答社区提供了答复 MemoryQ:Font Texture占用内存问题:真机连贯Profiler、真机连贯RenderDoc和Unity运行Profiler对应的Font Texture不统一,Unity版本:2018.2.16f1: Unity运行Profiler: 真机连贯Profiler: Unity连贯Profiler1: 真机连贯RenderDoc1: A:因为我近期在做一些纹理相干的试验时发现局部Unity版本会使真机上Alpha8格局的纹理大小不合乎计算结果: 多台手机、多个版本的测试比照,看得出这种异样产生在了一些特定手机中(其余版本也有产生轻微内存变动的,但远没有2018.2版本幅度这么大)。 按理来说1024×1024分辨率的Alpha8格局纹理大小应为1MB,然而真机上是4MB。我测试的其余版本(2018.4、2019.2、2019.4、2020.3)中则失常为1MB。且Mipmap、Read/Write等选项的开关也不影响内存翻了4倍的状况。 联合本帖的问题,我做了如下比拟试验(真机上的内存数据我用了UWA GOT Online Assets运行时资源检测服务,能够清晰看到内存的小数点后两位)。 场景中应用了一张1024×1024 Alpha8纹理和原大小为0.5MB的Font Texture字体纹理。 2018.4版本编辑器中:1024×1024 Alpha8纹理 2MBFont Texture 0.5MB 真机上:1024×1024 Alpha8纹理 1MBFont Texture 0.5MBFont Texture 0.125MB 2018.2版本编辑器中:1024×1024 Alpha8纹理 2MBFont Texture 0.5MB 真机上:1024×1024 Alpha8纹理 4MBFont Texture 1.25MB(0.5MB×2.5)Font Texture 0.32MB(0.125MB×2.5) ...

August 4, 2021 · 1 min · jiezi

关于memory:Python3-内存文件qbit

io.StringIO/io.BytesIO官网文档: https://docs.python.org/3/lib...tempfile.TemporaryFile/tempfile.TemporaryDirectory官网文档: https://docs.python.org/3/lib...pyfilesystem官网文档: https://docs.pyfilesystem.org/本文出自 qbit snap

June 20, 2021 · 1 min · jiezi

关于memory:Addressable-RemoteBuildPath下部分资源更新上传问题

1)Addressable RemoteBuildPath下局部资源更新上传问题2)Shader内存占用忽然变大3)Unity 2018.4上材质对贴图的冗余援用4)编辑器中呈现大量GC操作导致卡顿5)JsonUtility.ToJson浮点型保留小数问题 这是第251篇UWA技术常识分享的推送。明天咱们持续为大家精选了若干和开发、优化相干的问题,倡议浏览工夫10分钟,认真读完必有播种。 UWA 问答社区:answer.uwa4d.comUWA QQ群2:793972859(原群已满员) AddressableQ:Addressable设置好RemoteBuildPath门路后,Remote_Group(该Group下有多个资源包)下批改了一个资源包,Build->Update a previous build 完结后,RemoteBuildPath门路下将Remote_Group的所有资源包都从新生成了一遍(将所有的资源包从该门路下删除,再执行时还是会全副生成)。因为要将Remote_Group下的资源包上传到服务器,只心愿上传产生扭转的Remote资源,不心愿反复上传所有的资源包,该怎么操作呢? A:尽管全副从新生成,然而应该只有批改了的那份是不一样的,能够比照一下看看hash文件里记录的hash有没有变动。其实在服务器上间接都上传就行了,客户端会依据hash的不同下载变动了的Bundle。这种模式能保障服务器上的是最新的,客户端不论哪个版本都只有下载差别Bundle就行了。感激黄程@UWA问答社区提供了答复 A2:用了一个折中的方法,每次上传前计算已存在文件的md5,新的文件和md5值发生变化的文件上传至服务器。感激题主猴小样2016@UWA问答社区提供了答复 MemoryQ:我的项目Unity版本升级后,Shader内存占用变为原先的100倍,请问是什么起因导致的? A:这个应该是因为Unity 2019.4.20这个版本当前批改了Shader内存占用的统计形式。Unity这样改,不便大家间接看到是哪个Shader占用高,从而更好地定位问题。能够看到在版本升级后,Shader占用120多MB,ShaderLab变成了92KB。 2019.4.20f1 Release Notes 感激芭妮妮@UWA问答社区提供了答复 MaterialQ:打包后应用AssetHunter插件剖析发现有很多冗余援用,然而在游戏中应用Profiler却没有。 关上材质文件发现保留了很多旧的贴图援用信息: 如_CloudTex这个,是旧版本应用过的,新的Shader里都没有这个属性了。个别的查找援用的办法是找到所有关联的GUID,那就会找到这些旧的援用,但在手机上应用Profiler看内存时却没有相干援用的贴图被加载。是否是因为Unity打包时会主动把这些旧援用筛除?只管在Editor上还是找失去这些冗余援用,是否能够不必理睬? A1:旧的Shader应用过的Texture援用会被保留在序列化信息中,这是Unity无意的设计,为了防止编辑器下切换Shader再换回来时须要重新配置的麻烦。 Unity在打包时的确会对材质进行深度查看,把以后Shader没有应用的Texture依赖都去除,因而通常状况下打包旧的援用也不会导致包体变大。 但旧的援用在Editor下还存在一个问题,AssetDatabase.GetDependencies接口返回的援用会包含旧的援用,它不会进行深度检测来进行剔除。右键资源Select Dependencies调用的是这个接口,所以也会显示旧的援用,如下图: pic2和pic3是以后Shader2没有援用的。 所以应用GetDependencies这个接口实现一些性能,可能因为旧援用导致意外的问题。解决办法是:应用EditorUtility.CollectDependencies这个接口返回剔除旧援用的后果。 此外,如果Mat和pic1,pic2,pic3调配别独自打了一个AB包,那么打出的mat.manifest文件中会显示旧的Texture援用,这就是AssetBundle打包的一个不太正当的中央了,还没有调研新的Addressable零碎是否做了改良。 感激Prin@UWA问答社区提供了答复 A2:参考这个帖子:https://forum.unity.com/threads/material-asset-keeps-references-to-assets-that-are-not-used.523192/ 能够间接用外面的CleanUpMaterials来清理材质。 感激小埃拉@UWA问答社区提供了答复 EditorQ:编辑器下AssetDatabase.GetAllAssetBundleNamesWithoutVariant()呈现大量GC操作导致卡顿。 复现步骤:1.游戏外面抉择一个材质,或者其余对象。2.把Unity编辑器切换到后盾再切回来,我这里是间接点开Sublime再切回Unity做完下面两步后,Unity就会变的很卡很卡,通过Profiler剖析EditorLoop能够看到AssetDatabase.GetAllAssetBundleNamesWithoutVariant有大量的GC操作,如下图: 用的是Unity 2019.4.15f1,上面是我尝试过的解决方案:1.狐疑Unity版本问题,可是笔记本外面装置的同版本Unity新建工程是复现不了。2.狐疑OnInspectorGUI有问题,而后把代码外面的所有OnInspectorGUI正文了,也还是能复现。3.狐疑ShaderGUI有问题,把所有ShaderGUI相干代码删了,一样能复现。 有大佬能够提供其余思路去排查这个问题吗?咱们当初长期解决办法是,切换一下选中对象就不卡了。 A:我的项目中是通过设置AssetImporter的bundleName来标记Bundle的吗? importer.assetBundleName = bundleName;importer.assetBundleVariant = variant;查看了一下编辑器局部的源码,发现AssetDatabase.GetAllAssetBundleNamesWithoutVariant();这个API是在绘制上面这部分的时候调用的。猜想如果BundleName和BundleVariant较多,会不会引起卡顿? Q:咱们我的项目导入资源的时候是有只设置了Bundle Name,也就是上面的设置形式 importer.assetBundleName = bundleName; 我的项目是没有设置BundleVariant,不过的确有不少BundleName,对于BundleName数量官网有下限要求? A:你能够试一下在代码中手动调用一下AssetDatabase.GetAllAssetBundleNamesWithoutVariant()(internal办法,通过反射调用),看看是不是会造成大量GC和卡顿。如果本人调用也会造成卡顿,八成就是这个引起的。如果就是这个Bundle Name这个过多因而的卡顿,那你就用AAB的形式打bundle就好了,别设置importer.assetBundleName。感激马三小伙儿@UWA问答社区提供了答复 ScriptQ:在应用JsonUtility.ToJson时,保留float类型时,提前曾经做好保留两位小数,但ToJson后果1.059999999999999都是这样的。请问有解决办法吗? A:很遗憾,Unity的JsonUtility是在Native层实现的,是闭源的并且提供的接口性能极少。倡议应用其余Json插件,如Newtonsoft.json:https://github.com/SaladLab/Json.Net.Unity3D感激Prin@UWA问答社区提供了答复 A2:自荐一下魔改版LitJson4Unity。https://github.com/XINCGer/LitJson4Unity LitJson4Unity:实用于Unity的改进型LitJson库简介:基于原生的LitJson库革新的实用于Unity的LitJson库。 反对以下原生版本不反对的个性: 反对float类型(最新原生版本曾经反对)反对Unity内建类型(Vector2、Vector3、Rect、AnimationCure、Bounds、Color、Color32、Quaternion、RectOffset等)反对JsonIgnore Attritube,对某些字段跳过序列化反对对输入的Json内容格式化,更规整应用办法:间接将 Plugins/LitJson目录下所有的cs脚本放到你的工程中即可。 【Unity游戏开发】跟着马三一起魔改LitJsonhttps://www.cnblogs.com/msxh/p/12541159.html 感激马三小伙儿@UWA问答社区提供了答复 封面图来源于网络 明天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题兴许都只是冰山一角,咱们早已在UWA问答网站上筹备了更多的技术话题等你一起来摸索和分享。欢送酷爱提高的你退出,兴许你的办法恰能解他人的当务之急;而他山之“石”,也能攻你之“玉”。 官网:www.uwa4d.com官网技术博客:blog.uwa4d.com官网问答社区:answer.uwa4d.comUWA学堂:edu.uwa4d.com官网技术QQ群:793972859(原群已满员)

May 28, 2021 · 1 min · jiezi

关于memory:厚积薄发Instruments如何看Mono内存分配

1)Instruments如何看Mono内存调配 2)对于Addressable v1.11.2的疑难 3)开展UV2时导致Mesh顶点数减少 4)晋升Unity编辑器中代码的编译速度 5)Renderdoc调试的疑难 这是第217篇UWA技术常识分享的推送。明天咱们持续为大家精选了若干和开发、优化相干的问题,倡议浏览工夫10分钟,认真读完必有播种。 UWA 问答社区:answer.uwa4d.com UWA QQ群2:793972859(原群已满员) MemoryQ:例如在调配了一个10MB数组,对应在Unity Profiler中会看到开拓了至多10MB大小的Mono内存。 那么在Instruments中,如何查看调配的内存信息呢?Allocations中的信息是此过程中调配的所有内存信息吗,尝试调配过100MB内存,Allocations中的统计没有任何增长。 A:我这边也做了测试: 创立了100MB大小的int数组,Size理论应该是400MB。 而后到Profile察看: 能够看到ManagedHeap正确调配了这400MB的空间。 而后打包iOS后到Xcode运行,运行前首先把Run这个Scheme的Malloc Stack勾上。 RUN当前点选Memory并导出Memory Graph来察看: 因为应用程序的内存都是在VirtualMemory空间调配的,因而查看VM Regions的VM_ALLOCATE局部。 能够发现128X3+16刚好400MB的调配。 调用堆栈也很好确定: 正是咱们的测试代码。 而后咱们来看Instruments。首先是Allocations局部,有一点要留神,该栏的下部有一些选项: 留神最初一个选项,如果抉择第一个: All Heap & Anonymous VM,All Heap对应App理论调配的物理空间,不蕴含VM,Anonymous VM的官网解释是: interesting VM regions such as graphics- and Core Data-related. Hides mapped files, dylibs, and some large reserved VM regions。 因而一些比拟大的预留调配空间是不会显示的。 ...

September 10, 2020 · 1 min · jiezi

关于memory:厚积薄发Android-10系统下的PSS数值统计不准

1)Android 10零碎下的PSS数值统计不准 2)Memory Profiler中的类型内存大小计算 3)Addressable加载Bytes文件在手机上报错 4)应用SBP打Bundle,如何读取AssetBundleManifest 5)GameObject如何开释从Bundle中加载的Asset 这是第215篇UWA技术常识分享的推送。明天咱们持续为大家精选了若干和开发、优化相干的问题,倡议浏览工夫10分钟,认真读完必有播种。 UWA 问答社区:answer.uwa4d.com UWA QQ群2:793972859(原群已满员) MemoryQ:从下图测试的后果来看,Android 10.0的PSS的内存值是平的,没有任何变动。但如果用Android 9.0版本的测试机测试,数值就是失常。初步猜想这个就是Android 10的内存反馈,但到底是否为Bug还不确定。有遇到雷同状况的小伙伴吗? A:同样被Android 10坑了,来答复一下起因: ActivityManager的 public Debug.MemoryInfo[] getProcessMemoryInfo(int[] pids)变了。 /** <p>As of {@link android.os.Build.VERSION_CODES#Q Android Q}, for regular apps this method* will only return information about the memory info for the processes running as the* caller's uid; no other process memory info is available and will be zero.* Also of {@link android.os.Build.VERSION_CODES#Q Android Q} the sample rate allowed* by this API is significantly limited, if called faster the limit you will receive the* same data as the previous call.</p>*/查了一下安卓源码,这个值竟然默认是5分钟,也就是说5分钟更新一次,所以看起来是平的。 ...

August 12, 2020 · 1 min · jiezi