2. 托管内存

对于Unity内存管理而言,需要理解托管堆。对于如何分析托管内存和如何优化内存,可以参见Unity优化中的理解托管堆部分。

Assets 资产

Unity中的Assets在运行过程中会对原生内存和托管内存造成影响。Unity运行过程中是不会将托管的内存交还给操作系统重新利用,只有等到应用运行结束才会释放。如果碎片化很严重,碎片化的内存难以回收,托管的内存堆会一直保持增长直到消耗完所有的内存。这个行为是很难预测的,所以了解Asset在内存中的存放方式就非常重要了:

  • 使用Destroy(myObject)来销毁Object(对象)并且释放对应的内存。将某个Object的引用置成null并不会释放内存空间。
  • 应该把长期存在的对象设成类,短时间存在的对象设为结构体。结构体不会再内存堆上分配所以不会引起垃圾回收。
  • 重用临时缓冲区来保证临时分配的内存的需求,而不是频繁分配内存。
  • 枚举器(Enumerator)永远不会清除自己的内存。
  • 避免使用永远不会结束的协程(Coroutine),尤其是会在协程里面分配大量的托管内存,协程在运行过程中会保持堆中的栈分配内存,直到协程结束的时候才会释放。

更详细的参考资料最好去参阅上面提供的链接地址,会有更深入的理解。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Unity3D 里有两种动态加载机制:一个是Resources.Load,另外一个通过AssetBundle,其实...
    IongX阅读 1,733评论 0 5
  • 111. [动画系统]如何将其他类型的动画转换成关键帧动画? 动画->点缓存->关键帧 112. [动画]Unit...
    胤醚貔貅阅读 13,184评论 3 89
  • 这是摘自Unity官方文档有关优化的部分,原文链接:https://docs.unity3d.com/Manual...
    Wenchao阅读 1,692评论 0 3
  • 近期,朋友让我推荐有特色的励志书籍,我立马就想到了古典老师所著的《拆掉思维里的墙原来我还可以这样活》。 因为此书年...
    作女派阅读 474评论 0 3
  • 脚尖轻触风的温柔 摧残飘落的银杏 踩碎高扬的梦 秋风肆意 携来冬梅的汛期 带走夏荷的柔情
    黑青蛙阅读 143评论 0 0