2. 托管内存

作者: Wenchao | 来源:发表于2018-07-11 21:43 被阅读0次

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

Assets 资产

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

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

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

相关文章

  • 2. 托管内存

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

  • C# 托管内存与非托管内存之间的转换(结合Unity3d的实际开

    C# 托管内存与非托管内存之间的转换(结合Unity3d的实际开发) 1.c#的托管代码和非托管代码 c#有自己的...

  • unity的资源卸载和垃圾回收

    机制的内存托管语言,但是,即便是内存托管了,也会存在内存泄露,因为GC的算法并不是万能的; .Net不推荐手动在代...

  • unity开发内存优化

    ManagedHeap 表示的是Mono所使用的托管堆内存,C#上任何的申请托管的内存都会在这里申请。 Manag...

  • Mono GC

    什么是Mono内存对于目前绝大多数基于Unity引擎开发的项目而言,其托管堆内存是由Mono分配和管理的。“托管”...

  • Unity Mono托管内存优化

    引子 优化Mono的托管内存Mono的托管内存的优化主要是代码的优化,以下部分是我在网上收集的资料: 内容 1.尽...

  • 卸载gitlab步骤

    前面 在我2GB内存的低配阿里云主机上装了一个gitlab,发现占用内存太大了,索性卸载了,用其它代码托管网站托管...

  • C# 基础——托管类型和非托管类型

    在介绍 C# 的托管类型和非托管类型之前,我们先来说说 C# 的类型体系以及各种类型在内存(虚拟内存)中的存储方式...

  • C#:如何手工释放资源

    .NET 平台在内存管理方面提供了GC(Garbage Collection),负责自动释放托管资源和内存回收的工...

  • 内存优化

    内存的优化:Unity中的内存种类实际上Unity游戏使用的内存一共有三种:程序代码、托管堆(Managed He...

网友评论

    本文标题:2. 托管内存

    本文链接:https://www.haomeiwen.com/subject/vchuuftx.html