[Unity 优化]内存优化

图片

内存优化可以使用Unity profiler或者对应平台的内存分析工具进行分析,从 Unity3D内部的内存+Mono的托管内存 进行分析,避免内存泄漏。

1、内存测试一般使用手机测试,Unity profiler在Editor测试下的结果不准确。

[Unity优化]Unity Android Profiler

2、内存泄漏

①注册的事件监听,定时器事件,网络事件,要及时移除。
②及时回收不必要的资源,一般来说,在两个界面来回切换,然后发现内存占用在不断地上涨,这时候一般就存在内存泄漏。
③资源释放

3、尖峰处理

申请堆内存只增不减,超过一定值可能会被系统杀进程,所以要避免尖峰,防止游戏Crash。

4、GC

①定时GC。
②Resource.UnloadUnusedAssets()。

5、AssetBundle

①AssetBundle打包机制:避免资源冗余,避免磁盘IO压力。
②AssetBundle加载与卸载:加载存在WebStream(>100K)/SerializedFile(>256k),通常使用引用计数来实现卸载。
UIFramework之Unity5.x AssetBundle打包策略

6、代码

①减少foreach使用,迭代会有堆内存的操作,所以尽可能使用for。

string:string str = “1” + “2”;

string str1 = “1”;
string str2 = “2”;
string str = str1 + str2;
快很多,C#编译器对此有优化,在所有的字符串都是文本常量字符串时,编译器会在编译时将它们连接成一个字符串。也就是说在碰到诸如”a”+”b”这样的代码时,编译器会自动合并为”ab”;
字符串较多的时候建议使用StringBuilder。
③减少new的次数,增加复用。
④局部变量使用struct来代替class。
⑤NGUI:动静分离,减少同一个panel下不必要的Widgets,场景切换时,可以调用UIDrawCall.ReleaseInactive()清空缓存,避免频繁的网格重建。

7、资源优化

①纹理是大头
[Unity优化]资源优化之纹理优化
②动画精度
。。。。。

8、Other

ManagedHeap.UsedSize 当前使用的托管内存。
ManagedHeap.ReservedUnusedSize 当前保留的空闲托管内存。
Not Saved Mesh 代码生成的Mesh。

猜你喜欢

转载自blog.csdn.net/husheng0/article/details/78473293