我可以在非unity应用程序中使用IL2CPP(中间语言到c++)吗?



IL2CPP.exe是一个Unity工具,用于将c# IL代码转换为c++。我的问题是:这个可执行文件是否可以在Unity游戏开发环境之外使用,作为将任何.NET应用程序(不只是游戏)转换为高性能本机可执行文件的通用工具?

虽然我知道一些c++,但如果能用一种我熟悉的语言(c#)......编写所有类型的程序,那当然很好无论是音频/视频/音乐制作DAWs还是操作系统级别的安全/取证工具或机器学习平台,还是其他任何资源密集型的东西.......并且知道它们将和直接用c++编写的应用程序一样高效地运行。

简短回答:NO

IL2CPP与Unity环境紧密相连,不可能在Unity之外使用它。您需要编写自己的转换器(?)来做这样的事情。

<标题>

长回答IL2CPP在性能改进方面没有任何神奇的作用。比较c++和c#的IL2CPP代码应该(几乎-下面会详细说明)没有性能优势。

与为Unity编写的c#代码相比,IL2CPP的性能更好,具体原因与c++无关。

为什么Unity是独一无二的,需要IL2CPP:

  • Unity API非常依赖主线程性能,因为整个Unity API几乎是在10年前编写的,当时2核cpu是一流的,每个人都认为我们现在将拥有20-50GHz的单核cpu。Unity做了很多假设,你将使用他们的API的一切,乞求从IO到线程和GPU访问,这是严重绑定到c++核心。
  • Unity需要用Unity对象(monobehaviour和GameObjects)包裹起来,几乎可以用于任何东西,你不能自己编写任何东西。(这是一个简化)
  • Unity是用c++编写的,所以它需要做一些非常类似于编组的事情,这不是很有效。

为什么是IL2CPP?

  • Unity不能将它已经非常遗留的后端(Mono)和它的遗留API转换为多线程,因为Mono对你的代码有很多假设,不容易转换为"简单"。统一API。
  • Unity核心是用c++编写的,所以他们通过跳过Mono "translator"来消除任何形式的编组。IL2CPP将效率极低的c#单线程代码转换为多线程c++,在可能的情况下,它通过分析IL代码来实现这一点。

是否值得将其他c#转换为c++ ?

不!将AOT预编译的任意优化的c#代码与(现代的)c++代码进行比较。你应该得到同样的表现!我觉得完全一样。

c#被编译成IL(中间语言),顾名思义就是中间语言。它在运行时被转换为本机二进制代码(仅在需要时),这就是c++被编译成的。您可以通过运行提前编译(AOT)跳过IL生成来强制进行此转换。

你的c#代码唯一会降低性能的是当你滥用GC的清理能力时。

最新更新