当前位置: 首页 > news >正文

尽量通俗易懂地概述.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):支持构建物联网设备上的应用程序

 

 

 

相关文章:

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

本文参考来自唐老狮,Unity3D高级编程:主程手记,ai等途径 仅作学习笔记交流分享 目录 1. .Net是什么? 2. .Net框架的核心要点? 跨语言和跨平台 .Net x Unity跨平台发展史 Net Framework 2002 Unity跨平台之 Mono 2004 Unity跨平台之 IL2CPP 2015 二者区别 .NET Core …...

【AlphaFold3】开源本地的安装及使用

文章目录 安装安装DockerInstalling Docker on Host启用Rootless Docker 安装 GPU 支持安装 NVIDIA 驱动程序安装 NVIDIA 对 Docker 的支持 获取 AlphaFold 3 源代码获取基因数据库获取模型参数构建将运行 AlphaFold 3 的 Docker 容器 参考 AlphaFold3: https://github.com/goo…...

vue2/vue3中使用的富文本编辑器vue-quill

前言: 整理下常用的富文本编辑器工具。 vue3: 实现效果: 实现步骤: 1、安装插件, 编辑器核心插件 vueup/vue-quill yarn add pnpm i npm i cnpm i vueup/vue-quill vueup/vue-quill 2、安装选择性插件 &a…...

论文阅读《BEVFormer v2》

BEVFormer v2: Adapting Modern Image Backbones to Bird’s-Eye-View Recognition via Perspective Supervision 目录 摘要1 介绍2 相关工作2.1 BEV三维目标检测器 摘要 我们提出了一种具有透视监督的新型鸟瞰图(BEV)检测器,其收敛速度更快…...

自动化运维(k8s):一键获取指定命名空间镜像包脚本

前言:脚本写成并非一蹴而就,需要不断的调式和修改,这里也是改到了7版本才在 生产环境 中验证成功。 该命令 和 脚本适用于以下场景:在某些项目中,由于特定的安全或政策要求,不允许连接到你的镜像仓库。然而…...

HarmonyOS ArkUI(基于ArkTS) 开发布局 (上)

一 ArkUI(基于ArkTS)概述 基于ArkTS的声明式开发范式的方舟开发框架是一套开发极简、高性能、支持跨设备的UI开发框架,提供了构建应用UI所必需的能力 点击详情 特点 开发效率高,开发体验好 代码简洁:通过接近自然语义的方式描述UI&#x…...

第九部分 :1.STM32之通信接口《精讲》(USART,I2C,SPI,CAN,USB)

本芯片使用的是STM32F103C8T6型号 STM32F103C8T6是STM32F1系列中的一种较常用的低成本ARM Cortex-M3内核MCU,具有丰富的通信接口,包括USART、SPI、I2C等。下面是该芯片上通信接口的管脚分布、每个接口的工作模式、常用应用场景和注意事项。 1. USART (通…...

5. langgraph中的react agent使用 (从零构建一个react agent)

1. 定义 Agent 状态 首先,我们需要定义 Agent 的状态,这包括 Agent 所持有的消息。 from typing import (Annotated,Sequence,TypedDict, ) from langchain_core.messages import BaseMessage from langgraph.graph.message import add_messagesclass …...

uniapp vue3的下拉刷新和上拉加载

开启页面的下拉刷新,注意这个不是可滚动视图的下拉刷新. 一般页面建议使用页面外的,不要使用scroll-view里面的下拉刷新. pages: "pages": [ {"path": "pages/index/index","style": {"navigationBarTitleText": "首…...

STM32设计井下瓦斯检测联网WIFI加Zigbee多路节点协调器传输

目录 目录 前言 一、本设计主要实现哪些很“开门”功能? 二、电路设计原理图 1.电路图采用Altium Designer进行设计: 2.实物展示图片 三、程序源代码设计 四、获取资料内容 前言 本系统基于STM32微控制器和Zigbee无线通信技术,设计了…...

Vue 3 中的原生事件监听与组件事件处理详解

Vue 3 中的原生事件监听与组件事件处理完全指南 在 Vue 3 中,事件监听和事件处理是组件交互中的关键部分。Vue 提供了一套简单而强大的事件处理机制,可以方便地监听 DOM 原生事件和组件自定义事件。本篇文章将详细介绍 Vue 3 中事件的使用,包…...

Flink Source 详解

Flink Source 详解 原文 flip-27 FLIP-27 介绍了新版本Source 接口定义及架构 相比于SourceFunction,新版本的Source更具灵活性,原因是将“splits数据获取”与真“正数据获取”逻辑进行了分离 重要部件 Source 作为工厂类,会创建以下两…...

2024年了,TCP分析工具有哪些?

TCP分析工具广泛应用于网络调试、性能分析和协议学习。以下是一些常用的TCP分析工具,它们各有特点,适用于不同的场景: Wireshark - 这是一个非常强大的网络协议分析器,支持图形界面,可以捕获和分析TCP流量,…...

SRP 实现 Cook-Torrance BRDF

写的很乱! BRDF(Bidirectional Reflectance Distribution Function)全称双向反射分布函数。辐射量单位非常多,这里为方便直观理解,会用非常不严谨的光照强度来解释说明。 BRDF光照模型,上反射率公式&#…...

MySQL慢日志

慢查询日志顾名思义就是查询慢的sql语句可以记录到一个日志文件里,至于有多慢才会被记录,默认是10秒,但也可以通过系统配置来更改,慢日志在做系统优化时是一个非常好用的工具 #是否开启慢日志 show variables like slow_query_log…...

Flutter网络通信-封装Dio

前言 dio 是一个强大的 Dart HTTP 请求库,支持全局配置、Restful API、FormData、拦截器、 请求取消、Cookie 管理、文件上传/下载、超时以及自定义适配器等。 Dio的pub地址为:dio | Dart package 封装要求 能够使用get、post、put、patch、delete、…...

matlab 读取csv

需要跳过第一行表头等信息 1、读取整个文件 csvread(FILENAME)%文件路径 文件名2、指定起始位置 csvread(FILENAME, R, C)%从文件的第R行和第C列开始读取数据 逗号分开3、指定数据范围 csvread(FILENAME, R, C, [R1 C1 R2 C2])%读取从(R1, C1)到(R2, C2)范围内的数据注意&am…...

网络层9——虚拟专用网VPN和网络地址转换NAT

目录 一、为什么有虚拟专用网? 二、如何理解“虚拟专用网”? 三、IP隧道技术实现虚拟专用网 四、网络地址变换 一、为什么有虚拟专用网? 第一,IPv4只有32位,最多有40亿个全球唯一的IP地址数量不够,无法…...

开源科学工程技术软件介绍 – EDA工具KLayout

link 今天向各位知友介绍的 KLayout是一款由德国团队开发的开源EDA工具。 KLayout是使用C开发的,用户界面基于Qt。它支持Windows、MacOS和Linux操作系统。安装程序可以从下面的网址下载: https://www.klayout.de/build.html KLayout图形用户界面&…...

【网络安全】Cookie SameSite属性

未经许可,不得转载。 文章目录 背景CSRF 攻击SameSite 属性StrictLaxNone背景 为了有效防止 CSRF 攻击并保护用户隐私,Chrome 从 51 版本开始引入了 SameSite 属性,专门用于限制第三方 Cookie 的使用,进而减少安全风险。 CSRF 攻击 跨站请求伪造(CSRF)攻击是指恶意网站…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

Oracle查询表空间大小

1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...