我有以下问题:
- 是否可以使用VS.NET编译C#项目并在mono上运行?
- 使用方法1(与使用mono编译器编译)是否存在性能优势?
- 在Linux上运行输出的.exe/.dll文件如何?相关的性能特征是什么?
谢谢
我有以下问题:
谢谢
是的,您可以这样做。除非代码使用了在mono上未实现的一些框架元素,否则它应该能正常工作。
据我所知没有。
不确定#3和#1之间的区别是什么。如果您是指使用mono在Windows上进行编译,然后将其移植到Linux上,则应该仍然可以正常工作。两个编译器生成基本相同的IL代码。
1:
是的。编译器将代码编译成IL代码,可以在任何系统上运行。
并非所有库都在Mono中实现,但是那些已经实现的库应该可以无缝使用。此外,代码必须编写为与系统无关才能正常工作,例如:
Path.DirectorySeparatorChar
和Path.Combine
来形成文件路径,而不是使用字符串文字"\"
或"/"
。2:
编译器生成的代码可能会有所不同,但几乎所有优化都是由JIT编译器完成的,因此很少会产生可衡量的差异。
3:
exe和dll文件不包含本机代码,它们包含IL代码。当加载exe/dll时,本机代码是由JIT编译器生成的。
进一步解释其他人的回答:
对于第三点。使用MSCLR与Mono相比,会有性能差异,但我不知道具体差距是多少。也许没有差别,也许差别很小,或者其中一个远远快于另一个——你需要对你的特定应用程序进行分析。
请注意,尽管JIT编译器生成的代码速度很快,但库的实现方式将有很大不同,并且几乎肯定会有不同的性能特征。
如果你计划在Mono下支持你的应用程序,你需要在MS CLR和Mono下运行性能测试。