使用 C# 等现代跨平台编程语言编写带有 API 调用等的快速本机应用程序会很棒,不是吗?例如,如果您想使用简单且现代的编程语言编写一个简单的实用程序来帮助 IT 人员安装不需要其他组件的东西?或者如果你想编写 3D 游戏,它应该很快,而 JIT 只会让它变得更慢......

为什么,为什么不可能?为什么这些东西没有原生的现代编程语言?

有帮助吗?

解决方案

C# 和 .Net 本机代码。我认为您误解了 JITter。这不是虚拟机。C# 程序在执行之前会被编译为完全本机代码。

现在,“需要其他组件”部分是一个问题。不过,给点时间吧。如今,您将很难找到至少没有 .Net 2.0 的 Windows 安装,甚至一些主流 Linux 发行版都包含开箱即用的 Mono。

其他提示

不要认为 JIT 会使事情变慢。JIT 可以针对运行应用程序的确切计算机进行优化,而不是针对 386 或 Pentium 等通用计算机进行优化。它甚至可以在生成代码时做出更好的速度/内存权衡决策,因为它确切地知道可用的内容。如果 JIT 仍然使速度变慢,您可以对它们进行 NGEN,以便 JIT 提前完成。

作为这一点的证明,请考虑 Quake 已移植到 CLR 几次,在我个人的测试中,每秒的帧数是 快点 当 Quake 在 CLR 上运行时,我演示了大约一半的时间。

事实证明,已编译的 .NET 程序的运行速度与 C 语言一样快。如果您想要超精简,请在本机处理器的汇编中编写它。

您可以使用 Microsoft NGEN.EXE 工具创建 .NET 程序集的本机映像。看 MSDN NGEN 文档. 。微软已经考虑过你在这里得到的内容。

微软还制作 ILMERGE.EXE工具 将多个程序集文件合并为一个。这也可能与优化和速度有关。

顺便说一句,Mono 具有完全的提前编译,消除了运行时。(我认为这就是他们在 iPhone 上运行的方式,因为 iPhone 禁止任何 JIT。)

那么,这是否意味着我们可以使用(有限的).NET 调用将 C# 程序完全编译并链接到独立的 EXE 中,而无需安装 .NET 即可运行?

供参考:检查大约 5000 台服务器的服务器资产后发现,大约有 200 台服务器甚至没有安装 .NET 2.0。

这会导致必须在“所有 Windows 实例”上运行的代码出现问题。对于不包括 2.0 的 .NET 4.0+,情况会变得更糟,因为新旧 Windows 计算机可能都没有“正确的”.NET

有,C.C 可以用来编写任何应用程序,永远!!!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top