子线程GC导致主线程函数耗时较高的问题

1)子线程GC导致主线程函数耗时较高的问题

2)升级Unity大版本后,Text颜色修改问题

3)清除增量式GC导致的Mono堆内存泄漏问题

4)多Pass合批优化问题

这是第274篇UWA技术知识分享的推送。今天我们继续为大家精选了若干和开发、优化相关的问题,建议阅读时间10分钟,认真读完必有收获。

UWA 问答社区:answer.uwa4d.com

UWA QQ群2:793972859(原群已满员)

Rendering

Q:在主线程中有非常多的卡顿,从UWA的报告中看到很多异常的高耗时,请问可能是什么原因造成的?

A:像上面这样的频繁卡顿,且卡顿函数种类非常多的情况,应该是子线程分配了非常多的堆内存,导致子线程GC,从而卡住了主线程。当GC的时候,主线程可能会处于各种阶段,因此对应阶段的函数耗时就会包括等待GC的耗时。可以从UWA的Mono报告中查看是否有子线程分配了大量的堆内存,通常是由这种(Thread)打头的子线程函数的分配导致的。

感谢han@UWA问答社区提供了回答,欢迎大家转至社区交流:

https://answer.uwa4d.com/question/6180e0f28f8c834241fd6930

UGUI

Q:从Unity 4.6.9f1升级到Unity 2020.3.2.f1c1。首次Unity升级之后UI的Text颜色修改是正常。当运行一次之后,所有的Text颜色都无法修改了。就算新创建一个新的Text也无法修改。

A:会有多余的UI-Default和UI-DefaultFont这两个Shader,删除它们,然后重启Unity就好了。

感谢芝麻青豆角@UWA问答社区提供了回答,欢迎大家转至社区交流:

https://answer.uwa4d.com/question/6185085fd8413e18eb034520

Mono

Q:最近在研究Mono堆内存时,发现一帧内分配多次较大内存,会导致内存无法被回收。

过程如下:

在同一帧内调用三次分配100MB内存的方法,分配内存的变量都是在各自的作用域,在这之后调用GC.Collect()。发现有较大几率出现100MB或者200MB无法被回收的Mono堆内存。经过排查之后发现取消勾选Incremental GC之后,内存就能完全被收回。

我推测是每次申请内存的时候会执行一次GC,清除上一次分配的内存,但是由于使用增量GC,无法在本帧完成回收工作。再下一次GC的时候,第二次GC的回收内容被重置了,导致第二次的GC需要被回收的内存就泄漏了。

不知道我这么理解是不是对的,希望大佬们解惑。同时希望大佬告知有没有办法清除这部分内存。

测试环境:

Unity 2019.4.15c1

Unity 2020.4.15f2

测试平台:

安卓 Mono

以下为测试代码:

A:通过题主的方法,我也复现了该问题。我还是比较赞同你的理解的。

Unity官网的一篇关于增量GC的博客也写了该方法的弊端:

它的正常运行是需要前提的,那就是在GC期间这些被标记为“需要清理的内存”都保持不变。如果在GC期间变化了,比如频繁分配大量内存,那么就需要重新标记一遍,而这个阶段可能会有意想不到的bug产生。内存泄漏很可能就是发生在这个阶段(我也只是猜测)。

不过个人觉得增量GC仍然是一个良好的尝试,虽然它只是测试阶段,也存在着一些问题,但是以前的Boehm-Demers-Weiser garbage collector很容易引起高耗时峰值从而造成卡顿,而分代式GC正是为了减轻峰值的影响,尽量确保流畅性。

可以参考官方博客:https://blog.unity.com/technology/feature-preview-incremental-garbage-collection

该回答由UWA提供,欢迎大家转至社区交流:

https://answer.uwa4d.com/question/61658ad48f8c834241d92a0b

Rendering

Q:游戏使用简单的Mesh显示几十张扑克牌,为了效果,材质Shader使用了2个Pass,其中一个是拉伸做边缘效果,但是由于是多Pass,即使是相同的材质和贴图,还是不能动态合批,请教这种情况有没有什么优化方案?

1. 不能合批,但是材质是相同的,顺序渲染过程中是否有什么状态切换的消耗?

2. 能否使用两个Mesh,不同的材质,Shader都使用单Pass,区别是一个Mesh是正常显示,一个Mesh仅仅做拉伸边缘效果,理论上是不是不超过顶点数的情况下可以两次动态合批?

A1:Unity BuiltIn渲染管线不支持多Pass合批,多Pass的Shader通过Set Pass call逐个渲染每个Pass后才会继续渲染下一个Object重复一遍,所以会产生比较多的Draw Call。

更好的办法就是用自定义的渲染管线的方式渲染多个Pass。在渲染第一个Pass的时候,把所有的Object一次性全都渲染了,渲染完毕之后通过一次Set Pass Call去渲染下个Pass,可以试下URP渲染管线。

感谢星傲蝶恋@UWA问答社区提供了回答

A2:题主说的第二点是比较常规的做法,要注意的是为了防止Draw Call的穿插,需要调整这两种渲染的RenderQueue,将他们对应的RenderQueue错开。

感谢Xuan@UWA问答社区提供了回答,欢迎大家转至社区交流:

https://answer.uwa4d.com/question/6178c9c58f8c834241f2aaeb

20211108

更多精彩问题等你回答~

Unity增量打包AssetBundle没变化的资源也会被重新打包

在模型有UV2的情况下开启Generate Lightmap UVs

如何实现AAB包的增量更新

封面图来源于网络


今天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题也许都只是冰山一角,我们早已在UWA问答网站上准备了更多的技术话题等你一起来探索和分享。欢迎热爱进步的你加入,也许你的方法恰能解别人的燃眉之急;而他山之“石”,也能攻你之“玉”。

官网:www.uwa4d.com

官方技术博客:blog.uwa4d.com

官方问答社区:answer.uwa4d.com

UWA学堂:edu.uwa4d.com

官方技术QQ群:793972859(原群已满员)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容