2009-08-15 36 views
3

在Mono运行在编译我有以下问题:性能:在VS,在Windows和Linux

  1. 是否可以编译使用VS.NET C#项目,并在单运行呢?
  2. 与方法1相比,是否有任何性能优势(与编译单声道编译器相比)?
  3. 在linux上运行输出.exe/.dll怎么样?什么是相关的性能特点?

感谢

+1

使用单声道,您可以使用AOT(Ahead Of Time)编译。这会将您的.NET程序集(包含IL代码)编译为C++或C生成的本机代码,从而加快启动时间,改善内存性能并提高整体性能。但是,它只能在编译的操作环境(OS + x86/x64)上运行。 http://www.mono-project.com/AOT – 2009-08-15 23:14:27

+0

感谢您的信息。 – jameszhao00 2009-08-16 01:20:52

+0

@C罗杰斯 - 有点像NGEN(只是可能与GAC);-p – 2009-08-16 09:04:10

回答

8
  1. 是的,你可以做到这一点。它应该工作,除非代码使用一些在单声道上没有实现的框架元素。

  2. 不是我所知道的。

  3. 不知道#3和#1之间的区别是什么。如果您指的是在Windows上使用mono编译,然后将其移植到linux,它应该仍然工作。两种编译器都生成基本相同的IL代码。

1

我不知道性能,但this article试图展示如何编译MonoDevelop的工具下与这应该给你一些想法,以什么样的差异会。

6

1:
是的。编译器编译成可在任一系统中运行的IL代码。

不是每个库都在单声道中实现,但那些应该无缝工作。此外,该代码已被写入到被影响无关系统的正常工作,例如:

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

2:
有可能是在什么样的代码编译器产生一些差异,但几乎所有的优化是由JIT编译器应该很少作出任何可测量的差异来完成。

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

+0

我认为EXE/DLL包含CLR加载器/绑定器。 – jameszhao00 2009-08-15 23:00:54

2

为了扩大在别人的答案:

对于点3.使用MSCLR VS单的时候是会有的性能差异,没有,我不知道它是什么。也许没有什么,或许很少,或者可能一个更快 - 你将不得不分析你的具体应用。请注意,尽管JIT编译器的代码速度很快,但这些库的实现方式会有很大不同,并且几乎肯定会有不同的性能特征。

如果您打算在Mono下支持您的应用程序,您需要在那里运行性能测试以及MS CLR。