当前位置: 首页 > 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)攻击是指恶意网站…...

Linux 命令 | 每日一学,文本处理三剑客之awk命令实践

[ 知识是人生的灯塔,只有不断学习,才能照亮前行的道路 ] 0x00 前言简述 描述:前面作者已经介绍了文本处理三剑客中的 grep 与 sed 文本处理工具,今天将介绍其最后一个且非常强大的 awk 文本处理输出工具,它可以非常方便…...

RabbitMQ的工作队列在Spring Boot中实现(详解常⽤的⼯作模式)

上文着重介绍RabbitMQ 七种工作模式介绍RabbitMQ 七种工作模式介绍_rabbitmq 工作模式-CSDN博客 本篇讲解如何在Spring环境下进⾏RabbitMQ的开发.(只演⽰部分常⽤的⼯作模式) 目录 引⼊依赖 一.工作队列模式 二.Publish/Subscribe(发布订阅模式) …...

【web前端笔记】vue3 + vite的前端项目中,使用import.meta.glob()方法实现全局注册组件的通用代码

目录 1.1、如何读取所有文件 1.2、通用代码 1.3、在main.js引入 这篇文章介绍一下,在vue3和vite搭建的项目中,如何将【src/components】目录下所有的【*.vue】文件,当做一个组件全局注册到Vue对象里面。 1.1、如何读取所有文件 在vue3和vite搭建的项目里面,它给我们提…...

保险行业建立知识管理系统:提高效率和安全性的策略

在保险行业,知识管理系统(KMS)的建立对于提高工作效率和保障数据安全性至关重要。保险公司需要在复杂的生态系统中航行,这个生态系统由不断发展的法规、错综复杂的保单和投保人不断变化的需求所定义。以下是一些关键策略&#xff…...

小程序如何完成订阅

小程序如何完成订阅 参考相关文档实践问题处理授权弹窗不再触发引导用户重新授权 参考相关文档 微信小程序实现订阅消息推送的实现步骤 发送订阅消息 小程序订阅消息(用户通过弹窗订阅)开发指南 实践 我们需要先选这一个模板,具体流程参考…...

JS学习日记(jQuery库)

前言 今天先更新jQuery库的介绍,它是一个用来帮助快速开发的工具 介绍 jQuery是一个快速,小型且功能丰富的JavaScript库,jQuery设计宗旨是“write less,do more”,即倡导写更少的代码,做更多的事&#xf…...

Uni-APP+Vue3+鸿蒙 开发菜鸟流程

参考文档 文档中心 运行和发行 | uni-app官网 AppGallery Connect DCloud开发者中心 环境要求 Vue3jdk 17 Java Downloads | Oracle 中国 【鸿蒙开发工具内置jdk17,本地不使用17会报jdk版本不一致问题】 开发工具 HBuilderDevEco Studio【目前只下载这一个就…...

Linux的基本用法

Linux的基本用法涵盖多个方面,包括用户登录、系统操作、文件和目录管理、系统工具使用等。以下是对Linux基本用法的详细介绍: 一、用户登录与系统操作 用户登录 普通用户登录:选择用户名并输入密码。超级用户(root)登…...

如何找出爬取网站的来源IP呢?

1.背景 最近网站数据库性能很不稳定,查询性能在某段时间很慢,服务器CPU也很高,平常时间很低,感觉被爬虫恶意搞了,因此我分析了一下最近的nginx访问日志 2.方法 找出访问量最大20个ip [root100 nginx]# cat liuhaih…...

Java爬虫(Jsoup)详解

文章目录 Java爬虫(Jsoup)详解一、引言二、Jsoup 快速入门1、Jsoup 简介1.1、添加依赖 2、解析 HTML 文档2.1、解析 HTML 字符串2.2、从 URL 加载 Document2.3、解析 body 片断 三、数据抽取1、使用 DOM 方法遍历文档3.1、获取元素 2、使用选择器语法查找…...

网站模块怎么恢复/信息流优化师是干什么的

RegexExtractorInterceptor作为一个Interceptor实现类可以根据一个正则表达式匹配event body来提取字符串,并使用serializers把字符串作为header的值实例:以如下的命令使用execsource收集日志的时候,可以根据文件的名称设置不同的header&…...

北京企业做网站/百度推广课程

华商网讯 据陕视新闻 11月4日消息,陕西省教育厅关于10月29日印发《陕西省初中学业水平体育与健康考试工作方案》的通知,自2021 年1 月1 日起执行,2025 年12 月31 日自行废止。其中有两处明显变化:1、考试项目中增加了游泳200米的自…...

想自己搞一个视频网站怎么做/网络销售平台怎么做

3318 天前symb0l ulimit 和 limits.conf 都不能按照百分比设置限制,或许你可以手动算一下。能限制用户内存使用、线程数量和同时打开的文件数量。①以下是 ulimit 使用帮助# ulimit --helpulimit: ulimit [-SHabcdefiklmnpqrstuvxPT] [限制]修改 shell 资源限制。在…...

洛阳建设委员会网站/南宁百度seo排名

原标题:知识分享丨蓝牙电话功能操作指导什么是无线蓝牙技术:无线蓝牙技术是基于短距离的无线网络技术,使用 2402MHz ~ 2480MHz 的频率去让不同 的设备在短距离里连接。支持电脑端、外部设备、手机端、掌上电脑等各种不同的电子设备&#xff0…...

订阅号怎么做微网站/爱站关键词查询

5月30日,PHPWind精英站长全国巡回沙龙合肥站在合肥市古井假日酒店如期举行。来自全国各地的近400位网站站长和互联网精英齐聚一堂,对站长关心的社区创业、发展、推广、盈利等话题进行了精彩而又深入的探讨。PHPWind运营总监陈燎罕在大会发表了主题演讲&a…...

做广告联盟怎么做网站/网站托管

1. Redis持久化之RDB 1.1. 总体介绍 官网介绍:http://www.redis.io Redis 提供了2个不同形式的持久化方式。 RDB(Redis DataBase) AOF(Append Of File) RDB(Redis DataBase) 官网介绍 …...