美文网首页
内存管理之Mono内存

内存管理之Mono内存

作者: APP4x | 来源:发表于2020-11-19 18:58 被阅读0次
这是我在《Unity游戏优化 (第2版)》看的,记录一下~

内存效率是性能优化的一个重要元素

有啥问题呢?
不必要的内存分配由于过高的垃圾回收(消耗CPU时间)将导致糟糕的用户体验
内存泄漏将导致崩溃


1.Mono平台
Mono是个开源项目,基于API、 规范和微软的.Net Framework的工具构建了自己的类库平台
本质上,是.Net类库的开源重置,在几乎不访问原始源码的情况下完成,和微软的原始类库完全兼容

Mono项目的目标是通过框架提供跨平台开发,也就是说用一种编程语言编写的代码运行在很多不同的硬件平台上
Mono也支持很多不同的编程语言
也就是说:可以编译成.Net的通用中间语言(Common Intermediate Language,CIL)的任何语言都能与Mono平台集成

Unity并不是构建在Mono平台之上的,只是作为一个组成的部分。
Unity底层运行C++处理渲染、动画、资源管理等
Mono的用处大部分是实现玩法逻辑提供高级脚本语言

为啥用高级脚本语言呢?
其通过自动垃圾回收抽象并分离了复杂的内存管理,并提供各种安全管理内存的特性,这些都以牺牲运行时的开销为代价,简化了编程的行为

这样的语言 通常称为:托管语言,其特点是:托管代码
是微软创造的一个术语,指必须在公共语言运行时(Common Language Runtime,CLR)运行的源码,和通过目标操作系统编译与运行的代码不同。
托管的意思是:指依赖于独立运行时环境来执行,且由自动垃圾回收进行监控的代码

其缺点就是运行时消耗通常比本地代码要更大


2.内存域
Unity引擎中的内存空间本质上可以划分为3个不同的内存域,每个域存储不同的数据类型,关注不同的任务集
a.托管域
是Mono平台工作的地方
写的任何MonoBehaviour脚本和自定义的C#类在运行时都会在此域实例化对象
任何C#代码都会很明确与此域交互
内存空间也会自动被垃圾回收管理

b.本地域
Unity有一些底层的本地代码功能,它由C++编写,并根据目标平台编译到不同的应用程序中
这里关心的是内部内存空间的分配,为各种子系统(渲染管线、物理系统、用户输入)分配资源数据(纹理、音频文件、 网格)和内存空间
还包括 GameObject 和 Compoent 等重要游戏对象的部分本地描述,以便和这些内部系统交互
也是大多数内建Unity类(Transofrom等)保存期数据的地方

如果外部像访问这里,会访问 在本地域中的对象描述的包装器
指令会由Unity进入它的本地代码,在那里生成结果,然后复制回托管域
也就是 本地-托管桥
跨越这个桥通常需要内存进行上下文切换,会为游戏带来相当严重的潜在性能问题

c.外部库
比如DirectX和OpgenGL库,还有项目中很多自定义库和插件
在C#代码引用这些类库将导致类似的内存上下文切换和后续成本

相关文章

  • 内存管理之Mono内存

    这是我在《Unity游戏优化 (第2版)》看的,记录一下~ 内存效率是性能优化的一个重要元素 有啥问题呢?不必要的...

  • Mono GC

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

  • Mono 自动内存管理

    https://blog.csdn.net/jinzhuojun/article/details/9292467 ...

  • Unity中的GC优化

    Unity 的 Mono 引擎等运行时系统会自动管理内存,不仅书写方便而且大大降低了内存泄漏的可能性(即分配了内存...

  • iOS性能调优之--内存管理

    iOS性能调优之--内存管理 iOS性能调优之--内存管理

  • Q:Java有几种引用类型?

    Java有几种引用类型 引自 java 知识 之 内存管理 Java 中的内存管理包括内存分配和内存回收,这些都是...

  • Unity性能优化1 2 3

    堆内存优化 就目前Unity所使用的Mono版本而言,Mono堆内存分配特点是,一旦分配,就不会返还给系统,无论堆...

  • 内存优化(4)

    # mono模式下的gameobject 创建与加载monobehavier以后,内存中有大量这种东西,内存中是没...

  • Unity Mono托管内存优化

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

  • iOS内存管理详解

    目录 block内存管理 autorelease内存管理 weak对象内存管理 NSString内存管理 new、...

网友评论

      本文标题:内存管理之Mono内存

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