.net - Mono虚拟机的当前性能如何?

标签 .net performance mono

Web充满了不同语言,编译器和虚拟机的各种性能测试。但是,几乎没有任何一种方法可以在某些实际情况下测试性能。此外,在Google中搜索此类基准通常只能产生数年的基准,因为那些基准有最多的时间来收集与它们的链接。

你们中的任何人对不同虚拟机的当前性能有真正的了解吗?另外,我特别想知道Mono的性能如何与Microsoft .Net和Sun的Java相比较,以及最近不同虚拟机的性能如何发展。

最佳答案

衡量性能是一件复杂的事情。过去,当针对相同的操作系统,相同的硬件和一组非常有限的库对语言进行测试时,就有可能创建基准,以提供一个可以衡量系统的线性指标。它将使人们从零到十评估事物,吸收结果并快速进入下一个主题。

对于现代系统,由于要考虑多个变量,因此事情变得更加复杂。

至少在Mono的情况下,有很多变量在起作用:

  • 代码:
  • 生成的 native 代码的质量。
  • 生成 native 代码的速度。
  • 生成代码和优化代码
  • 所需的内存
  • 是代码生成器多线程
  • 是生成的线程安全的代码
  • 在编译时或JIT时是否利用CPU特定的功能。
  • 是否可以使用SIMD指令(如果有)。
  • 语言是否可以将自身整齐地映射到多核平台
  • 语言是否为优化器提供了足够的参数来自动优化代码(就像Fortran一样)。
  • 内存管理:
  • 使用的垃圾收集算法
  • GC是否可以在多个CPU上扩展?
  • GC是增量的还是实时的?
  • 它是否支持线程本地存储以提高性能?
  • 它是否精确,紧凑,代代相传,保守?
  • API设计:
  • 是为延迟或带宽设计的API
  • Do API支持自动缩放到多个CPU。
  • 您可以将繁重的工作转移到GPU吗?
  • 您的API是否支持流接口(interface)

  • 所有这些使事情变得非常复杂,很难给出简单的0到10的答案。

    如果您要在类中对语言进行分区,并且假设您是一个有能力且有性能意识的程序员,那么我将在这些类中划分世界:
  • 方法1:由专业
  • 手动调整汇编语言
  • 方法2:静态编译的强类型语言:C/C++/Fortran/
  • 第3层:托管/JIT语言:Java/C#/。NET/Mono/Boo/F#
  • 第4层:动态键入/JIT语言:Google V8,IronPython,IronRuby
  • 第5层:纯解释语言:Python,Perl
  • 第6层:纯解释型语言,功能太多,不利于自身。

  • 但是这些语言并不能说明全部情况,您将使用的API,托管操作系统和其他功能将对您的结果产生很大的影响。

    例如,最近在Mono中,我们增加了对以更高级,高度优化的引擎(LLVM引擎)替换Mono的代码生成引擎的支持。事实证明,在使用LLVM的开销值得额外的内存使用的情况下,找到一个难以置信的测试是非常困难的:台式机和Web应用程序没有太大的区别。这可能是由于这些大多数都是受I/O约束的应用程序。

    使用LLVM对于科学和计算密集型应用程序很有用,但是在现实生活中,它与Mono的默认优化设置没有太大的区别。

    至于Mono的细节:尽管Mono确实使用了Boehm的GC,但是大多数人没有意识到的是Boehm可以通过各种方式进行配置。默认的外行配置确实不是很强大,但是它适用于所有需要快速GC的人。 Mono在此模式下不使用Boehm,Mono广泛配置Boehm以使其在精确模式下工作,并充分利用线程本地存储,多核GC和OS释放内存的模式。

    关于.net - Mono虚拟机的当前性能如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1150002/

    相关文章:

    performance - 加速R中的循环操作

    c# - 为什么在使用 Rhino Mocks stub 函数时需要 Replay()?

    c# - 获取listview的item双击事件

    c# - 是否可以使用 Windows 应用程序打包项目打包两个 UWP 应用程序?

    c# - 这里发生了什么? (.Net) GC.CollectionCount(0) 不断增加

    f# - F# 代码片段在 MONO 下不起作用

    c# - 是否可以在 Linux 上运行 Xamarin Mono?

    .net - 我可以使用某些查看器来查看和搜索serilog日志文件吗?

    performance - 如何提高 JavaFX 图表性能?

    performance - 为单个值存储两个相关哈希键的最佳方法