对于Unity内存管理而言,需要理解托管堆。对于如何分析托管内存和如何优化内存,可以参见Unity优化中的理解托管堆部分。
Assets 资产
Unity中的Assets在运行过程中会对原生内存和托管内存造成影响。Unity运行过程中是不会将托管的内存交还给操作系统重新利用,只有等到应用运行结束才会释放。如果碎片化很严重,碎片化的内存难以回收,托管的内存堆会一直保持增长直到消耗完所有的内存。这个行为是很难预测的,所以了解Asset在内存中的存放方式就非常重要了:
- 使用
Destroy(myObject)
来销毁Object(对象)并且释放对应的内存。将某个Object的引用置成null并不会释放内存空间。 - 应该把长期存在的对象设成类,短时间存在的对象设为结构体。结构体不会再内存堆上分配所以不会引起垃圾回收。
- 重用临时缓冲区来保证临时分配的内存的需求,而不是频繁分配内存。
- 枚举器(Enumerator)永远不会清除自己的内存。
- 避免使用永远不会结束的协程(Coroutine),尤其是会在协程里面分配大量的托管内存,协程在运行过程中会保持堆中的栈分配内存,直到协程结束的时候才会释放。
更详细的参考资料最好去参阅上面提供的链接地址,会有更深入的理解。
网友评论