UNITY优化资料收集
U3D手册:
Optimizing garbage collection in Unity games
https://zhuanlan.zhihu.com/p/25306993
https://github.com/mc-gulu/gl-bits/tree/master/(2017)%20unity-gc-cheatsheet 这个收集很全,也很新,结合项目得出的实际经验值得参考
https://docs.unity3d.com/Manual/MobileProfiling.html 注意这里说明了MONO堆是只增不减的,在释放时并不是释放给操作系统,而是给MONO堆。
U3D的内存= UNITY内存+ MONO内存。
UNITY内存是引擎在C++层的堆内存: 包括:Asset data (Textures, Meshes, Audio, Animation, etc), Game objects, Engine internals (Rendering, Particles, Physics, etc). Use Profiler.usedHeapSize
to get the total used Unity memory.
MONO堆是托管堆。在C#层申请的内存都属于托管堆。
Use System.GC.GetTotalMemory
to get the total used Mono memory.
此文档中还提到了不要在移动平台使用 OnGUI(),在它里面会申请大量的内存。这一点不知道UNITY升级了IMGUI后还是否存在,有待测试。
可以使用下面这些API在游戏中实现自己的内存剖析功能:
You can also make your own tool using Unity API calls:-
FindObjectsOfTypeAll (type : Type) : Object[]
FindObjectsOfType (type : Type): Object[]
GetRuntimeMemorySize (o : Object) : int
GetMonoHeapSize
GetMonoUsedSize
Profiler.BeginSample/EndSample
- profile your own codeUnloadUnusedAssets () : AsyncOperation
System.GC.GetTotalMemory/Profiler.usedHeapSize
https://unity3d.com/de/learn/tutorials/topics/performance-optimization/optimizing-garbage-collection-unity-games?playlist=44069
U3D 内存查看工具 MemoryProfiler
安卓内存查看工具:android profiler