单看速度,Mono 在 Mac OS X 上足够快吗?

3
我必须在下一家公司项目中使用.NET/C#。由于我在Mac上开发我的项目,所以我研究了mono作为开发环境/工具。
在Mac OS X上,mono的速度足够快吗?我的意思是,与在Windows机器上运行相同代码的.NET相比,运行汇编的性能如何?
在实际情况下,我是否需要购买PC笔记本电脑来开发C#/.NET?
编辑: 感谢回答。我看到另一个需要考虑的问题是兼容性问题和开发工具。 我想问一下mono的质量如何;如果mono比Windows .NET慢10倍,那我最好不要使用它。但是,如果mono只比Windows .NET慢1.5倍,那为什么不呢?
7个回答

15

对于交互式应用程序,您通常不会在相同硬件上的Mono和.NET之间注意到任何性能差异。

以下是一些需要注意的事项:

  • Mono当前的垃圾回收器是保守的,而不是分代的。
  • Mono的代码生成引擎不如.NET先进。
  • 在计算密集型任务(例如执行图像处理或视频处理)时,预计Mono的速度为.NET的70%。
  • 在OSX上,Mono的线程本地存储有几个已知的缓慢代码路径和一些其他小问题。

所有这些都是团队关注的领域,所以很快你将看到两种情况的变化。我们正在开发一种新的GC,就像.NET一样是分代的,预览版将在2.8中推出。

代码生成引擎现在可以选择使用LLVM,在2.6中效果还可以,在2.8中将达到99.8%的代码覆盖率(从当前的60或70)。不幸的是,LLVM使得JIT编译时间非常缓慢,因此我们只在类似“ngen”的场景或希望以启动速度为代价获得更好性能的程序中使用它。

使用LLVM时,我们能够在大多数测试中与.NET和Java相匹配,但有少数例外。

最后,正在解决OSX特定的限制,并将在2.8中推出。


7
直接回答你的问题:是的,Mono的性能足够快,可以在Mac上开发。几年前我们将.NET的Remoting代码移植到Mono时遇到了很多问题,但我被告知自那时以来Mono已经得到了极大的改进。关于开发环境:#developMonoDevelop都是跨平台的。
现在说说实际情况:
这个问题背后的主旨似乎是想避免购买Windows许可证,只使用Mac和Mono。这是一个糟糕的想法。即使你厌恶Windows及其代表的一切,如果你正在为Windows编写软件,你有责任在Windows中彻底测试它,甚至包括内部发布的产品。
话虽如此:我建议使用Boot Camp和Parallels/VMWare。 Boot Camp
最好的.NET开发工具仅适用于Windows。即使你找到了一个替代的开发环境,你最终还是要测试应用程序在本机速度下运行的情况。 虚拟机
虚拟机对于大多数测试和调试是足够好的。如果你的应用程序有可能造成任何损害,你尤其要使用虚拟机进行沙盒测试。在我上一份工作中,我们做了低级别的侵入式扫描和调整。当我们的代码有错误时,我们会真正地搞砸事情。所有的测试都是在虚拟机中进行的,然后才放到真实的机器上。 以上方法将允许你只拥有一台Mac(假设它是基于Intel的),如果你愿意,仍然可以在OS X + Mono中完成所有开发。但这并不能避免使用Windows。

3
如果目标平台是Windows PC,我强烈建议你购买一台。不一定是为了开发(虽然这会使它更容易),但绝对是为了测试和查找错误。
编辑:我不是Mac用户,但是你不能在虚拟PC或者其他似乎自带你的操作系统的东西上运行Windows吗?就.NET/C#而言,很难找到比Visual Studio更好的IDE了(个人意见)。

虚拟PC已经消失了。基于Intel的Mac现在可以本地运行Windows。我在我的MacBook Pro上双重启动...事实上,它现在已经启动到Windows了。 - Shaggy Frog
是的,我在想的是Boot Camp/Parallels。其中Parallels是“虚拟”PC选项。 - Cory Charlton

2
如果你有一台基于Intel的Mac电脑,不需要购买新电脑。你可以使用Boot Camp或Parallels来本地运行Windows系统。

1

如果你被雇佣来编写一个必须在 Windows 上运行的 C#.net 解决方案,那么你不能用其他方式开发它。或者这样说吧:你问过你的老板了吗?去问问吧,我们等着你。

不过你可以使用 Mac 硬件来运行 Windows 操作系统。你可以使用 VMWare 或 Parallels 或 BootCamp 在 Mac 上运行 Windows。


0

我建议你至少在Bootcamp或Parallels Desktop中安装Windows。对于开发,出于性能原因,我会选择Bootcamp。

Mono并不一定支持.NET Framework中的所有内容。大部分是可以的,但不是全部。

此外,你需要本地安装SQL Server(Express)吗?我知道大多数使用.NET的项目都使用SQL Server作为数据后端。如果是这种情况,你也需要Windows。

通常,在开发特定环境的应用程序时,你应该运行该环境。


0
我们已经在Mono上为Mac OS X开发了约5年的代码。性能越来越好。GUI将严重依赖于您选择的库。MonoMac现在似乎是一个很好的选择。

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