C# 性能:在VS中编译,在Windows和Linux上在Mono中运行
我有以下问题:C# 性能:在VS中编译,在Windows和Linux上在Mono中运行,c#,.net,linux,performance,mono,C#,.net,Linux,Performance,Mono,我有以下问题: 是否可以使用VS.NET编译一个C#项目,并在mono上运行 方法1(相对于使用mono编译器编译)是否有任何性能优势 在linux上运行output.exe/.dll怎么样?相关的性能特征是什么 谢谢 是的,你能做到。除非代码使用一些未在mono上实现的框架元素,否则它应该可以工作 我不知道 不确定3和1之间的区别是什么。如果您指的是在Windows上使用mono进行编译,然后将其移植到linux,那么它应该仍然可以正常工作。两个编译器生成的IL代码基本相同 我不知道性能如何,
我不知道性能如何,但尝试展示如何在vs下编译MonoDevelop工具。这应该会让您了解其中的区别。1:
对编译器编译成IL代码,在两个系统中运行 并不是每个库都是用Mono实现的,但是这些库应该可以无缝地工作。此外,必须编写独立于系统的代码才能正常工作,例如:
- 使用
和Path.directorysepartorchar
形成文件路径,而不是使用字符串literalPath.combined
或“\”
“/”
- 使用BitConverter类执行独立于big-endian/little-endian结构的字节操作
编译器生成的代码可能存在一些差异,但几乎所有的优化都是由JIT编译器完成的,因此很少会产生任何可测量的差异 3:
exe和dll文件不包含本机代码,它们包含IL代码。本机代码由JIT编译器在加载exe/dll时生成。要展开其他答案: 关于第3点。是的,使用MSCLR和Mono时会有性能差异,不,我不知道会是什么。可能什么都没有,可能很少,或者可能一个要快得多-您必须分析您的特定应用程序 还要注意的是,尽管JIT编译器生成的代码速度很快,但库的实现方式将非常不同,并且几乎肯定会有不同的性能特征
如果您计划在Mono下支持您的应用程序,您将需要在那里运行性能测试以及MS CLR。我认为EXE/DLL包含CLR加载程序/绑定程序。使用Mono,您可以使用AOT(提前)编译。这将将.NET程序集(IL代码)编译成C++或C所生成的本地代码,从而提供更快的启动时间、更好的内存性能和潜在更好的整体性能。但是,它只能在编译它的操作环境(OS+x86/x64)上工作@C罗杰斯-有点像恩根(只是可能是GAC)-P