Unity内存的优化
来源:互联网 发布:水乳推荐20到25岁 知乎 编辑:程序博客网 时间:2024/05/29 15:47
内存的优化
既然要聊Unity3D运行时候的内存优化,那我们自然首先要知道Unity3D游戏引擎是如何分配内存的。大概可以分成三大部分:
- Unity3D内部的内存
- Mono的托管内存
- 若干我们自己引入的DLL或者第三方DLL所需要的内存。
第3类不是我们关注的重点,所以接下来我们会分别来看一下Unity3D内部内存和Mono托管内存,最后还将分析一个官网上Assetbundle的案例来说明内存的管理。
Unity3D内部内存
Unity3D的内部内存都会存放一些什么呢?各位想一想,除了用代码来驱动逻辑,一个游戏还需要什么呢?对,各种资源。所以简单总结一下Unity3D内部内存存放的东西吧:
- 资源:纹理、网格、音频等等
- GameObject和各种组件。
- 引擎内部逻辑需要的内存:渲染器,物理系统,粒子系统等等
Mono托管内存
因为我们的游戏脚本是用C#写的,同时还要跨平台,所以带着一个Mono的托管环境显然必须的。那么Mono的托管内存自然就不得不放到内存的优化范畴中进行考虑。那么我们所说的Mono托管内存中存放的东西和Unity3D内部内存中存放的东西究竟有何不同呢?其实Mono的内存分配就是很传统的运行时内存的分配了:
- 值类型:int型啦,float型啦,结构体struct啦,bool啦之类的。它们都存放在堆栈上(注意额,不是堆所以不涉及GC)。
- 引用类型:其实可以狭义的理解为各种类的实例。比如游戏脚本中对游戏引擎各种控件的封装。其实很好理解,C#中肯定要有对应的类去对应游戏引擎中的控件。那么这部分就是C#中的封装。由于是在堆上分配,所以会涉及到GC。
而Mono托管堆中的那些封装的对象,除了在在Mono托管堆上分配封装类实例化之后所需要的内存之外,还会牵扯到其背后对应的游戏引擎内部控件在Unity3D内部内存上的分配。
举一个例子:
一个在.cs脚本中声明的WWW类型的对象www,Mono会在Mono托管堆上为www分配它所需要的内存。同时,这个实例对象背后的所代表的引擎资源所需要的内存也需要被分配。
一个WWW实例背后的资源:
- 压缩的文件
- 解压缩所需的缓存
- 解压缩之后的文件
0 0
- Unity的内存优化
- Unity内存的优化
- Unity的内存优化
- 【Unity优化】内存优化
- [Unity 优化]内存优化
- unity 的内存优化工具 Memory Profiler
- Unity匿名函数的堆内存优化
- unity图片内存优化
- unity内存优化总结
- unity图片内存优化
- Unity优化内存笔记
- Unity内存优化
- 【Unity】内存优化
- Unity内存优化
- 【unity优化四】内存
- unity 内存优化
- Unity内存优化
- unity 内存优化
- Spring 4.3 新增加的请求注解,对@RequestMapping()进行了细分
- 题目1156:谁是你的潜在朋友(hash)
- 进程、轻量级进程(LWP)、线程
- 获取html代码中的正文部分
- Jquery扩展的两种方式
- Unity内存的优化
- 结构体指针
- 剑指Offer面试题54:表示数值的字符串
- java中如何读写文件
- Angular(三)路由ui-router
- 关于static的一些认识
- fast-rcnn配置运行VGG16.caffemodel和VGG_CNN_M_1024.v2.caffemodel(Ubuntu14.04)
- 软件自我成长之路——关于自动更新
- html5 语义化标签