您是否有必要根据性能而选择使用.NET而不是Java呢?
对于可以执行以下操作的典型的大容量事务处理系统,
我的方法是用Java为JVM编写基准测试,为C#编写.NET的基准测试,在不同的负载级别下对上述操作进行基准测试,并比较结果。
撇开语言和平台首选项不说,--我想听听您将如何在Java和Java之间做一个决定性的性能比较?
是否存在任何全面和受尊重的基准?
发布于 2009-07-10 17:31:10
对于JVM和CLR的效率,我没有确切的数字,但如果有差别,可能会很小。
然而,在语言方面,C#确实有一些比Java更低的构造,这将允许更多的优化。
构造,如:
ref和out结合起来,以避免过度复制这些大值类型。stackalloc,它允许您直接在堆栈上分配数组,而在堆上分配一个普通的数组,这样做更慢,但也更方便。我个人不知道stackalloc的任何实际应用。ArrayList<Integer>切换到内部使用int[]缓冲区的自定义类型)就可以很容易地解决。这一切似乎都倾向于C#,我确实认为C#有更好的低级别语言结构,可以帮助提高性能。但是,我怀疑这些差异真的很重要(在您的情况下,它们甚至不适用,如果您所做的只是数据库访问( Java可能更快),那么使用指针对您没有任何好处),如果选择以其他方式阻碍您(比如跨平台)。追求正确性,即与您的需求相匹配的平台,而不是细微的性能差异。
发布于 2010-07-09 15:52:09
是Java和.Net CLR之间的决定性性能比较,这是一个白日梦。您总是可以进行性能测试,使其中一个看起来比另一个更好,因为工程一个复杂的系统总是涉及妥协。如果将基准测试的类型缩小到运行时速度和内存,您可能会发现这样的文章:http://www.codeproject.com/KB/dotnet/RuntimePerformance.aspx,这绝不是争论的结束。
发布于 2012-04-25 09:27:31
撇开语言和平台首选项不说,我想听听您将如何在Java和.Net CLR之间做一个决定性的性能比较?
我将编写一套基准测试,让您比较这两个VM及其标准库的不同特性。我的专长是技术计算,因此我建议如下:
也许您可以为数据库和web服务提供类似的东西。
不要忘记,位于CLR之上的语言具有非常不同的属性。例如,inline在F#语言中允许您自动化优化,这些优化可以比C#获得巨大的性能提升。相反,goto in C#使您能够比在F#中更有效地完成一些事情,并且在C#中对结构的优化比在F#中更有效(我上次看过)。
是否存在任何全面和受尊重的基准?
没有,但是有许多零散的基准集中在异常值上,因为它们更有趣。例如,这篇博客文章描述了为什么简单的通用哈希表基准测试在F# on .NET上比在.NET上的Java中快17×10。在这种情况下,原因是值类型和具体化泛型使得在.NET上编写比在JVM上高效得多的通用哈希表实现成为可能。
https://stackoverflow.com/questions/1108358
复制相似问题