性能:在VS中编译,在Windows和Linux上使用Mono运行

4

我有以下问题:

  1. 是否可以使用VS.NET编译C#项目并在mono上运行?
  2. 使用方法1(与使用mono编译器编译)是否存在性能优势?
  3. 在Linux上运行输出的.exe/.dll文件如何?相关的性能特征是什么?

谢谢


1
使用Mono,您可以使用AOT(Ahead Of Time)编译。这将把您的.NET程序集(带有IL代码)编译成类似于C ++或C生成的本机代码,从而提供更快的启动时间,更好的内存性能和潜在的更好的总体性能。但是,它只能在编译的操作环境(OS + x86 / x64)上运行。http://www.mono-project.com/AOT - Callum Rogers
@C Rogers - 有点像NGEN(也许带有GAC);-p - Marc Gravell
4个回答

9
  1. 是的,您可以这样做。除非代码使用了在mono上未实现的一些框架元素,否则它应该能正常工作。

  2. 据我所知没有。

  3. 不确定#3和#1之间的区别是什么。如果您是指使用mono在Windows上进行编译,然后将其移植到Linux上,则应该仍然可以正常工作。两个编译器生成基本相同的IL代码。


7

1:
是的。编译器将代码编译成IL代码,可以在任何系统上运行。

并非所有库都在Mono中实现,但是那些已经实现的库应该可以无缝使用。此外,代码必须编写为与系统无关才能正常工作,例如:

  • 使用Path.DirectorySeparatorCharPath.Combine来形成文件路径,而不是使用字符串文字"\""/"
  • 使用BitConverter类进行字节操作,这是独立于大端/小端架构的。

2:
编译器生成的代码可能会有所不同,但几乎所有优化都是由JIT编译器完成的,因此很少会产生可衡量的差异。

3:
exe和dll文件不包含本机代码,它们包含IL代码。当加载exe/dll时,本机代码是由JIT编译器生成的。


我认为EXE/DLL包含CLR加载器/绑定器。 - jameszhao00

2

进一步解释其他人的回答:

对于第三点。使用MSCLR与Mono相比,会有性能差异,但我不知道具体差距是多少。也许没有差别,也许差别很小,或者其中一个远远快于另一个——你需要对你的特定应用程序进行分析。

请注意,尽管JIT编译器生成的代码速度很快,但库的实现方式将有很大不同,并且几乎肯定会有不同的性能特征。

如果你计划在Mono下支持你的应用程序,你需要在MS CLR和Mono下运行性能测试。


1

我不知道性能如何,但this article试图展示如何在vs下编译MonoDevelop工具。这应该让你对差异有一些了解。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接