7

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

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

4

7 回答 7

15

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

现在,“需要其他组件”部分是一个问题。不过,给它时间。这些天你会很难找到至少没有 .Net 2.0 的 Windows 安装,甚至一些主流的 linux 发行版都包括开箱即用的单声道。

于 2009-10-24T02:48:49.670 回答
8

不要假设 JIT 会使事情变慢。JIT 可以针对运行应用程序的确切计算机而不是像 386 或 Pentium 这样的通用计算机进行优化。它甚至可以在生成代码时做出更好的速度/内存权衡决策,因为它确切地知道什么是可用的。如果 JIT 仍然让事情变得更慢,你可以 NGEN 他们这样 JITting 都是事先完成的。

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

于 2009-10-24T02:58:48.963 回答
3

已证明已编译的 .NET 程序运行速度与 C 一样快。如果您希望它超精简,请将其以汇编语言编写,用于您的本机处理器。

于 2009-10-24T02:51:19.793 回答
2

您可以使用 Microsoft NGEN.EXE 工具来创建 .NET 程序集的本机映像。请参阅MSDN NGEN 文档。微软已经知道你在这里得到了什么。

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

于 2009-10-24T02:56:47.457 回答
0

附带说明一下,Mono 完全提前编译,消除了运行时。(我认为这就是他们在禁止任何 JIT 的 iPhone 上运行的方式。)

于 2009-10-26T09:52:26.477 回答
0

那么,这是否意味着我们可以使用(有限的).NET 调用将一个 C# 程序完全编译并链接到一个独立的 EXE 中,该 EXE 可以在完全不安装 .NET 的情况下运行?

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

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

于 2013-04-25T16:15:04.597 回答
-3

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

于 2009-10-24T02:44:42.297 回答