单声道表现

问题描述 投票:23回答:8

与GNU / Linux中的Java相比,Mono是否有任何性能基准测试?

你有没有测试过Mono的性能?

performance mono runtime
8个回答
12
投票

米格尔有一篇有趣的帖子。

“阿尔瓦罗指出,在语言枪战基准测试中,Mono排在第18位,而Java排在第10位。

我们知道Sun的专有Java版本(不是开源版本,因为那个版本尚无法找到)比Mono更快,但我很惊讶我们已经落后了。所以我查看了Java6和Mono之间的比较。“

Comparison - Java and Mono (来源:tirania.org

See Details Here


28
投票

这个枪战的最新版本可以找到here

简而言之,与Java相比,Mono使用更少的内存并且运行速度稍慢。

为了保持透视,它们在宏观方案中的运行速度大致相同。他们运行这些测试的速度比Ruby,LUA,Python,PHP和Perl等语言快几个数量级。它们与Pascal,OCaml,Haskell和LISP处于相同的球场,这使得它们的速度大约是C和C ++的一半。点击here了解更多详情。

为了挑剔,我们应该清楚我们的答案在这里比较Java和Mono C#。 Mono和JVM都是各种语言的目标环境,语言选择也很重要。例如,如果我们将Mono上的F#与JVM上的Clojure进行比较,我们会得到完全不同的结果,突然“Mono”就是“faster”。

虽然这些比较很有趣并且信息丰富,但你必须带着它们。首先,尽管有些人这样做,但大多数编写Java和C#代码的人在紧密循环中都没有运行数值算法。其次,在某些语言中,经过测试的算法可能只是调用用C语言编写而不是用目标语言编写的库。最后,其他基准(和实现)可能会产生不同的结果。

尽管如此,推断Go比Ruby快得多是合理的,C ++比Go快,而且Java和C#的表现非常合理,因为它们的效率如何(恕我直言)。


12
投票

amazedsaint>米格尔有一篇有趣的帖子。

那张图表已经过时了!

这是the current Mono C# 4.0 comparison



2
投票

我的基准测试(使用复杂的数学问题和内存操作(使用原始字符串)):

MonoDevelop Windows(使用.net 3.5在控制台上运行):对1,000,000个项目执行计算... 535执行长字符串操作... 2,038对1,000,000个项目执行计算... 530执行长字符串操作.. 1,962对1,000,000个项目执行计算... 530执行长字符串操作... 1,963

在Windows上使用mono.exe:对1,000,000个项目执行计算... 6,875使用长字符串执行操作... 6,206对1,000,000个项目执行计算... 6,840使用长字符串执行操作... 6,114执行计算1,000,000项...... 6,857执行长串操作... 6,116

在Linux上使用mono Ubuntu:对1,000,000个项目执行计算... 5,934执行长字符串操作... 6,915对1,000,000个项目执行计算... 6,034执行长字符串操作... 7,489对1,000个项目执行计算.000项...... 5,740执行长字符串操作... 6,731

相同的源代码,但在Visual Studio 2008上:对1,000,000个项目执行计算... 588执行长字符串操作... 1,289对1,000,000个项目执行计算... 566执行长字符串操作... 1,320对1,000,000个项目执行计算... 702执行长字符串操作... 1,393

VS 2008使用NGEN生成exe(本机可执行文件):对1,000,000个项目执行计算... 567执行长字符串操作... 1,255对1,000,000个项目执行计算... 563执行长字符串操作... 1,269对1,000,000个项目执行计算... 562执行长字符串操作... 1,263

在那些测试中,mono比.net 3.5 SP 1慢10倍(=


2
投票

C ++,C#(Mono),C和Vala:http://jpaflacerda.wordpress.com/2011/11/08/vala-benchmarking/

许多语言:http://attractivechaos.github.com/plb/

结论:Mono进化很多,但与其他语言相比,它仍然很慢。我对Vala感兴趣,它与C#的语法几乎相同但在某些情况下比普通的C更快。


1
投票

大多数基准都是基于紧密循环的大量计算。时间在循环之前开始计数并且在之后停止。如果您的应用程序正在进行繁重的数据处理,那么请避免使用C#和Java,只需使用C / C ++即可。

您的应用程序更可能是服务器端。它必须接受查询,获取数据并将其发回。在这种情况下,与其他参数相比,生成的代码的原始速度不相关。

您最好先了解底层框架的效率,执行代码之前的初始化阶段有多快,实现非阻塞I / O等高效技术的容易程度,内存释放的好坏以及之后的流程再循环代码执行。部署代码是多么容易,使其扩展...

人类参数甚至比所有这些都重要。写得好的Java比好的C#慢,反之亦然。所以你必须检查你的开发人员。他们掌握哪种语言,他们更喜欢哪种工具?他们是VS / resharper上瘾者还是他们可以使用Java IDE?学习新语言或IDE所花费的时间不会用于编写更好,更优化的代码。


© www.soinside.com 2019 - 2024. All rights reserved.