尽量通俗易懂地概述.Net U nity跨语言/跨平台相关知识

        本文参考来自唐老狮,Unity3D高级编程:主程手记,ai等途径 仅作学习笔记交流分享

目录

1. .Net是什么?

2. .Net框架的核心要点?

跨语言和跨平台

.Net x Unity跨平台发展史

Net Framework 2002

Unity跨平台之 Mono 2004

Unity跨平台之 IL2CPP 2015

二者区别

.NET Core 2016


 

1. .Net是什么?

        类似于次世代,互联网+的一种口号,就是一个系列产品的名字

        其最核心的运行库框架叫.Net Framework,开发工具叫Visual Studio( .Net 后来去掉了),所以很多人认为其特指.Net Framework也是很正常的事情

        这种事情知道就行了

2. .Net框架的核心要点?

跨语言和跨平台

为什么要跨语言?

因为各种语言的特点是不同的,擅长方向也不同,另外代码重用和团队协作也很需要跨语言

这部分涉及到几个新名词,能理解就理解,不能也没关系

  1. CLS(Common Language Specification):包含了所有 .NET 语言必须支持的特性和规则

  2. CTS(Common Type System):包含了所有 .NET 语言的数据类型和规则

  3. CLI(Common Language Infrastructure):包含了 .NET 框架的所有基础设施

用 Venn 图表示如下:

+-----------------------------+
|            CLI              |
|  +-----------------------+  |
|  |         CTS           |  |
|  |  +---------------+    |  |
|  |  |     CLS       |    |  |
|  |  +---------------+    |  |
|  +-----------------------+  |
+-----------------------------+

 

.Net x Unity跨平台发展史

Net Framework 2002

        .NET Framework 本身主要是为 Windows 平台设计的,因此它不具备跨平台能力,其特点如下

        面向对象编程环境:提供一个一致的面向对象编程环境,无论代码是在本地存储和执行,还是在分布式环境中运行
        丰富的类库:包含大量的类库,支持常见的编程任务,如文件操作、数据库访问、网络通信、图形界面等
        内存管理和垃圾回收:通过 CLR 提供自动内存管理和垃圾回收,减少内存泄漏和管理的复杂性        
        安全性:提供代码访问安全和验证,确保代码在受控环境中运行

拆解 

4a23a808b37747a39a06a32d7f58209d.png

1.首先代码会被编译成 CIL(Common Intermediate Language 公共中间语言)

CIL 是一种中间语言,当你编写的代码(如 C#、VB.NET 或 F#)被编译时,会生成 CIL 代码。CIL 是与平台无关的,这意味着它可以在任何安装了 CLR 的平台上运行

cd943ddcfd1347e196137e74b63f3c1b.png

CIL也叫IL其有三种转译方式 

1.即时编译(JIT)
即时编译(Just-In-Time Compilation, JIT)是在程序运行时将 CIL 代码编译成机器代码。这种方式可以在运行时进行优化,但可能会导致初始启动时的性能开销。
2. 预编译(AOT)
预编译(Ahead-Of-Time Compilation, AOT)是在程序部署之前将 CIL 代码编译成机器代码。这种方式可以减少运行时的开销,提高启动速度,但灵活性较低。
3. 解释执行
解释执行是直接解释和执行 CIL 代码,而不进行编译。这种方式通常用于调试和开发环境,性能较低

 

2.运行时,CLR (Common Language Runtime,公共语言运行时) 将 CIL 代码通过 JIT 编译器编译成机器代码,然后在具体的硬件上执行 可以说代码就是在CLR上面运行的

CLR 是 .NET 平台的运行时环境,负责管理代码的执行。它提供内存管理、安全性、异常处理和垃圾回收等服务CLR 的一个重要功能是即时编译(JIT),它会在运行时将 CIL 代码编译成机器代码,以便在具体的硬件上执行

45a7546f0a8840e284d4ca1d1bafe760.png

微软后来推出了 .NET Core(现已统一为 .NET 5 及更高版本),这是一个真正的跨平台框架,支持在 Windows、Linux 和 macOS 上运行 

 

Unity跨平台之 Mono 2004

Mono 是一个开源的 .NET Framework 实现,旨在使 .NET 应用程序能够在多个平台上运行

d90eebdfe63c4133aecccb1ad9c8776d.pngeb6342cb949147b68ce5c7546bbf326e.png

Mono 主要使用 JIT 编译来执行 CIL 代码

其核心就是将.NET Framework 的CLR换成了Mono VM 代码在这上面执行

相当于在不同平台创建了自己的虚拟机(比如window有window虚拟机,安卓有安卓虚拟机,ios有ios虚拟机),从而将中将代码转为机器码

但是这么做工作量会很大,毕竟每一个平台的虚拟机都要维护 

其优缺点如下

55fe94e1ed3c456a97e9b75b02094257.png

 

Unity跨平台之 IL2CPP 2015

IL2CPP(Intermediate Language To C++)是 Unity 提供的一种编译技术,它将 .NET 中间语言(IL)代码转换为 C++ 代码,然后再编译成机器代码这种方法主要用于提高性能和支持 AOT(Ahead-Of-Time)编译

IL2CPP 的主要特点包括:

性能优化:通过将 IL 转换为 C++,可以进行更多的优化,提升运行时性能
平台支持:IL2CPP 支持多种平台,包括移动设备、控制台和 WebAssembly
安全性:AOT 编译可以减少反编译的风险,提高代码安全性

8a1e7439020e4a57b1d7235963430823.png

IL2CPP 使用 AOT 编译

注意看,其是将CIL转为C++ 之后通过各个平台的C++编译器转为机器码 最后通过IL2CPP VM虚拟机运行,但这个虚拟机仍然采用c#的GC方式 所以使用起来也是安全放心啊

其优点如下:

606f60817ab4404bb931ca1b119612a1.png

 

二者区别

0639e146bf8443c6b2c125121f69df77.png

 

.NET Core 2016

.NET Core 是一个开源、跨平台的开发框架,适用于构建现代、高性能的应用程序,其特点如下

        跨平台:支持在 Windows、Linux 和 macOS 上运行,真正实现了跨平台开发
开源:.NET Core 是开源的,源代码托管在 GitHub 上,任何开发者都可以参与贡献
        高性能:相比于 .NET Framework,.NET Core 提供了更高的性能,特别是在服务器端应用程序中
        模块化:.NET Core 采用模块化设计,可以根据需要引用特定的库,减少应用程序的体积
        灵活部署:支持多种部署方式,包括自包含部署和框架依赖部署,可以根据需求选择最合适的方式
        统一编程模型:通过 .NET Standard,提供了一个统一的 API 集合,使得不同平台上的代码可以共享

2b5dbdc1d31a4fef880ed530a5416d1c.png

其通常运用在如下方面

        Web 应用开发:使用 ASP.NET Core 构建高性能的 Web 应用和 API,支持在 Windows、Linux 和 macOS 上运行
        云服务:适用于构建和部署云原生应用,支持与 Azure 等云平台的无缝集成
微服务架构:支持构建基于微服务架构的应用,提供了良好的扩展性和可维护性
        桌面应用:通过 .NET Core,可以构建跨平台的桌面应用程序,特别是使用 .NET MAUI(Multi-platform App UI)
        移动应用:结合 Xamarin 和 .NET MAUI,可以使用 .NET Core 构建跨平台的移动应用2。
物联网 (IoT):支持构建物联网设备上的应用程序

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/915298.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

大陆 ARS513 / ARS510 标准雷达(解析二)

1。GW_ACU (0x40) • GW_ACU_LongAccel Longitudinal acceleration of ego vehicle. • GW_ACU_LongAccel_ValidFlag Valid flag of signal “GW_ACU_LongAccel”. • GW_ACU_LateralAccel Lateral acceleration of ego vehicle. Signal quality requirements for “GW_ACU_La…

【游戏引擎之路】登神长阶(十四)——OpenGL教程:士别三日,当刮目相看

【游戏引擎之路】登神长阶(十四)——OpenGL教程:士别三日,当刮目相看 2024年 5月20日-6月4日:攻克2D物理引擎。 2024年 6月4日-6月13日:攻克《3D数学基础》。 2024年 6月13日-6月20日:攻克《3D…

【C++动态规划】2304. 网格中的最小路径代价|1658

本文涉及知识点 C动态规划 LeetCode2304. 网格中的最小路径代价 给你一个下标从 0 开始的整数矩阵 grid ,矩阵大小为 m x n ,由从 0 到 m * n - 1 的不同整数组成。你可以在此矩阵中,从一个单元格移动到 下一行 的任何其他单元格。如果你位…

数据中台解决方案

文件是关于数据中台解决方案的详细介绍,内容涵盖了数据中台的定义、建设方案、实施步骤、以及在数字化转型中的作用。以下是对文件内容的分析和总结: 1. 数字化转型背景 国家政策支持:提到了《中华人民共和国国民经济和社会发展第十四个五年…

JS 实现WebSocket通讯和什么是WebSocket

WebSocket 介绍: WebSocket 是一种网络传输协议,可在单个 TCP 连接上进行全双工通信。它允许服务器主动向客户端推送信息,客户端也能实时接收服务器的响应。 客户端 这里实现了将input内的内容发送给客户端,并将接收到的服务器的…

K8S单节点部署及集群部署

1.Minikube搭建单节点K8S 前置条件:安装docker,注意版本兼容问题 # 配置docker源 wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo# 安装docker环境依赖 yum install -y yum-utils device-m…

算法闭关修炼百题计划(六)

塔塔开(滑稽 1.删除排序链表中的重复元素2.删除排序链表中的重复元素II3.字典序的第k小数字4.下一个排列5.排序链表6.随机链表的复制7.数据流的中位数 1.删除排序链表中的重复元素 使每个元素就出现一次 class Solution { public:ListNode* deleteDuplicates(ListNode* head)…

PH热榜 | 2024-11-13

DevNow 是一个精简的开源技术博客项目模版,支持 Vercel 一键部署,支持评论、搜索等功能,欢迎大家体验。 在线预览 1. Agree.com 标语:人人免费电子签名! 介绍:Agree,这款由人工智能驱动的平台…

PTE-中间件安全

DOCKER环境,一般是80 8080 8081端口 1 apache位置扩展名解析漏洞 cd vulhub-master/httpd/apache_parsing_vulnerability/ docker-compose up -d 修改一句话的后缀 直接上传 蚁剑 2 CVE-2017-15715 docker-compose stop cd .. cd CVE-2017-15715/ dock…

【Linux】Github 仓库克隆速度慢/无法克隆的一种解决方法,利用 Gitee 克隆 Github 仓库

Github 经常由于 DNS 域名污染以及其他因素克隆不顺利。 一种办法是修改 hosts sudo gedit /etc/hosts加上一行 XXX.XXX.XXX.XXX github.comXXX 位置的 IP 可以通过网站查询 IP/服务器github.com的信息-站长工具 这种方法比较适合本身可以克隆,但是速度很慢的…

Elasticsearch 8.16:适用于生产的混合对话搜索和创新的向量数据量化,其性能优于乘积量化 (PQ)

作者:来自 Elastic Ranjana Devaji, Dana Juratoni Elasticsearch 8.16 引入了 BBQ(Better Binary Quantization - 更好的二进制量化)—— 一种压缩向量化数据的创新方法,其性能优于传统方法,例如乘积量化 (Product Qu…

MySQL数据库常用命令大全(完整版——表格形式)

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 ✨特色专栏&#xff1a…

微型导轨在自动化生产线中起什么作用?

在现代制造业的飞速跃进中,自动化生产线的蓬勃发展引领了一场效率与质量的双重革命。微型导轨作为传动领域的重要零部件,可用于工业自动化生产线上的零件运输、加工设备定位等,实现自动化生产和减少人力成本。那么,微型导轨在自动…

Flutter 小技巧之 Shader 实现酷炫的粒子动画

在之前的《不一样的思路实现炫酷 3D 翻页折叠动画》我们其实介绍过:如何使用 Shader 去实现一个 3D 的翻页效果,具体就是使用 Flutter 在 3.7 开始提供 Fragment Shader API ,因为每个像素都会过 Fragment Shader ,所以我们可以通…

c++实现B树(下)

书接上回小吉讲的是B树的搭建和新增方法的实现(blog传送门🚪:B树实现上)(如果有小可爱对B树还不是很了解的话,可以先看完上一篇blog,再来看小吉的这篇blog)。那这一篇主要讲的是B树中…

【Oracle篇】掌握SQL Tuning Advisor优化工具:从工具使用到SQL优化的全方位指南(第六篇,总共七篇)

💫《博主介绍》:✨又是一天没白过,我是奈斯,DBA一名✨ 💫《擅长领域》:✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux,也在扩展大数据方向的知识面✌️…

使用Java绘制图片边框,解决微信小程序map组件中marker与label层级关系问题,label增加外边框后显示不能置与marker上面

今天上线的时候发现系统不同显示好像不一样,苹果手机打开的时候是正常的,但是一旦用安卓手机打开就会出现label不置顶的情况。尝试了很多种办法,也在官方查看了map相关的文档,发现并没有给label设置zIndex的属性,只看到…

关于sass在Vue3中编写bem框架报错以及警告问题记录

在编写完bem框架后 在vite.config.ts文件进行预编译处理时,报错的错误 1. 处理方式:使用新版api, 如图: 2. 处理方式:使用 use 替换掉 import, 如图: 3. 处理方式:使用路径别名&am…

BizDevOps:从理念到实践,贯通企业全链路协同

👆 点击蓝字 关注我们 引言 BizDevOps的概念由DevOps发展和进化而来,其目标超越了开发和运维的协同,进一步实现业务、研发和运维的全链条协作,让业务作为价值的起点及核心目标。 BizDevOps的核心驱动力在于解决效率和正确性上的割…

C#与C++交互开发系列(二十二):跨进程通信之使用基于HTTP协议的REST风格的API

1. 前言 REST API(Representational State Transfer Application Programming Interface)是一种基于HTTP协议的通信方式,广泛用于网络服务和分布式应用程序之间的通信。通过REST API,可以让C#和C应用程序进行跨进程、甚至跨平台的…