与 GNU/Linux 中的 Java 相比,Mono 是否有任何性能基准?
你有没有测试过 Mono 的性能?
可以在此处找到此枪战的最新版本。
简而言之,与 Java 相比,Mono 使用的内存少得多,运行速度也慢一些。
为了使事情保持正确,它们在总体规划中的运行速度大致相同。它们运行这些测试的速度都比 Ruby、LUA、Python、PHP 和 Perl 等语言快几个数量级。它们都与 Pascal、OCaml、Haskell 和 LISP 在同一个球场,这使得它们的速度大约是 C 和 C++ 的一半。点击这里了解更多详情。
为了挑剔,我们应该清楚我们的答案是比较 Java 和 Mono C#。Mono 和 JVM 都是各种语言的目标环境,语言的选择很重要。例如,如果我们将 Mono 上的 F# 与 JVM 上的 Clojure 进行比较,我们会得到完全不同的结果,突然“Mono”变得“更快”。
虽然这些比较很有趣且内容丰富,但您必须对它们持保留态度。首先,虽然有些人会这样做,但大多数编写 Java 和 C# 代码的人并不是什么都不运行,而是在紧密循环中运行数值算法。其次,在其中一些语言中,经过测试的算法可能只是调用了用 C 编写的库,而不是目标语言。最后,其他基准(和实现)可能会产生不同的结果。
尽管如此,可以合理地推断出 Go 比 Ruby 快得多,C++ 比 Go 快,而且 Java 和 C# 的性能都相当合理,因为它们的生产力很高(恕我直言)。
Miguel 对此发表了一篇有趣的文章。
“Alvaro 指出,在 Language Shootout Benchmark 中,Mono 排在第 18 位,而 Java 排在第 10 位。
我们知道 Sun 的专有 Java 版本(不是开源版本,因为还没有找到那个版本)比 Mono 快,但我很惊讶我们落后这么多。所以我查看了 Java6 和 Mono 之间的比较。”
(来源:tirania.org)
我将 Mono 2.2 与其他各种虚拟机(包括 OCaml、LLVM、.NET 和 Java)进行了基准测试:
总之,Mono 2.2 比 Mono 2.0 好,但通常仍然比几乎所有其他版本慢很多。
我的基准测试(使用复杂的数学问题和内存操作(使用原始字符串)):
MonoDevelop Windows(使用 .net 3.5 在控制台上运行):Realizando cálculos em 1.000.000 itens... 535 Realizando Operações com strings longas... 2.038 Realizando cálculos em 1.000.000 itens... 530 Realizando operações com strings longas... . 1.962 Realizando cálculos em 1.000.000 itens... 530 Realizando Operações com strings longas... 1.963
在 Windows 上使用 mono.exe: Realizando cálculos em 1.000.000 itens... 6.875 Realizando operações com strings longas... 6.206 Realizando cálculos em 1.000.000 itens... 6.840 Realizando operações com strings longas... 6.114 Realizando cálculos em 1.000.000 itens... 6.857 Realizando Operações com strings longas... 6.116
在 Linux Ubuntu 上使用单声道: Realizando cálculos em 1.000.000 itens... 5,934 Realizando opações com strings longas... 6,915 Realizando cálculos em 1.000.000 itens... 6,034 Realizando operações com strings longas... 7,489 Realizando cálculos em 1.000 .000 itens... 5,740 Realizando Operações com strings longas... 6,731
相同的源代码,但在 Visual Studio 2008 上: Realizando cálculos em 1.000.000 itens... 588 Realizando operações com strings longas... 1.289 Realizando cálculos em 1.000.000 itens... 566 Realizando operações com strings longas... 1.320 Realizando cálculos em 1.000.000 itens... 702 Realizando Operações com strings longas... 1.393
VS 2008 使用 NGEN 生成的 exe(本机可执行文件): Realizando cálculos em 1.000.000 itens... 567 Realizando operações com strings longas... 1.255 Realizando cálculos em 1.000.000 itens... 563 Realizando operações com strings longas... 1.269 Realizando cálculos em 1.000.000 itens... 562 Realizando Operações com strings longas... 1.263
在这些测试中,单声道比 .net 3.5 SP 1 慢 10 倍 =(
C++、C#(单声道)、C 和 Vala:http: //jpaflacerda.wordpress.com/2011/11/08/vala-benchmarking/
多种语言:http ://attractivechaos.github.com/plb/
结论:Mono 发展了很多,但与其他可用语言相比仍然很慢。我对 Vala 很感兴趣,它具有与 C# 几乎相同的语法,但在某些情况下比普通 C 更快。
大多数基准测试都基于紧密循环的大量计算。时间在循环之前开始计数并在之后停止。如果您的应用程序正在执行繁重的数据处理,请避免同时使用 C# 和 Java,只需选择 C/C++。
您的应用程序更有可能是服务器端的。它必须接受查询、获取数据并将其发回。在这种情况下,与其他参数相比,生成代码的原始速度无关紧要。
你最好看看底层框架的效率如何,代码执行前的初始化阶段有多快,实现非阻塞 I/O 等高效技术有多容易,内存释放和进程回收之后的效率如何代码执行。部署代码有多容易,让它扩大规模......
人的参数比这一切都更重要。写得不好的 Java 比好的 C# 慢,反之亦然。所以你必须检查你的开发人员。他们掌握哪种语言,他们更喜欢哪种工具?他们是 VS/resharper 上瘾者还是可以使用 Java IDE?花在学习新语言或 IDE 上的时间不会花在编写更好、更优化的代码上。