在测试C#与Java性能(执行)时,需要关注哪些方面?

3
我正在进行一项学校项目,在该项目中,我需要开发一个假设供验证或证伪。我的假设是在 Windows 平台上,C# 的执行时间比 Java 更快,因为 C# 是由 Microsoft 开发的。你们中有些人可能已经知道了这个假设的答案,并且可能已经有研究记录了这一点。但是这并不重要,我只需要自己完成这个项目。
所以,我想请教一些关注点的想法,以及如何衡量它们?
P.S. 它不应该太复杂。
谢谢!

6
这个假设的问题在于它非常宽泛。你可能会发现很多领域它是正确的,也可能会发现许多领域它是错误的;并且你会找到很多应用程序的性能是由其中一种因素而不是另一种所决定的。 - user395760
我同意@delnan的观点。如果你想让它简单化[如你的问题所建议的],我会专注于一个方面:内存访问/垃圾收集/浮点数算术计算/... - amit
JVM JIT 在数学/位运算方面做得非常好(即与 C++ 一样快),我认为 .NET JIT 也不会差太远——这肯定值得一试,但如果出现太大的差异,我会感到惊讶。我也不明白内存访问会如何受语言的影响,特别是考虑到开销本身。测试内存屏障可能会很有趣,GC 是一个非常好的想法(尽管考虑到所有可用的不同变体,这很复杂)。 - Voo
我的问题有点不太清楚。我的意思是,在我询问想法的领域中,C# 的执行时间比 Java 更快。 - Kenci
你不觉得你的假设有点带有偏见吗? - Albin Sunnanbo
学生们被问到这种问题让我非常生气。你拿两种构建方式大致相同的语言,然后问哪一种更快?这表明完全不了解性能实际上是什么。它关乎特定程序实际执行的细节 *例如此示例*。而不是关于概念远高于实际应用的东西。 - Mike Dunlavey
5个回答

4

以下是我需要测试的一些内容:

打开文件、写入一行数据并关闭文件所需的时间。

打开网络连接所需的时间。

打开数据库连接、写入一个字节并关闭连接所需的时间。

创建和填充数组、标准ArrayList和泛型ArrayList所需的时间。

使用不同算法进行排序所需的时间。

运行大循环所需的时间。


1
打开数据库连接所需的时间可以告诉你一些关于数据库驱动程序/库的信息,但无法告诉你编写程序所使用的语言。那么,你如何确保你的C#和Java程序是等效的呢?我比了解Java更熟悉C#,因此我期望当我用C#编写程序时,它会比我用Java编写程序更有效率,仅仅因为我更了解这种语言、平台和编译器。你如何在不同的语言中编写两个“相等”的程序呢? - jalf
如果说C#在Windows上更好,那应该是因为C#与操作系统的交互比Java更快。否则,你会期望C#或Java在不同操作系统下都保持一致的速度。然而,我怀疑C#有优势的地方是集成了Windows特定功能,而不是性能方面。 - Peter Lawrey

2
这个假设的问题在于,我只需要找到一个反例就可以证明它是错误的。而且你可以写无数个程序,所以验证你的假设是不可能的。
即使你把它缩小到“C#在排序方面比Java更快”,我仍然可以写出无数个进行排序的程序。只要其中一个在Java实现中更快,你的假设就被推翻了。
另一个问题是,C#和Java都没有“速度”。
微软的C#编译器和他们的.NET实现的最新版本有一些性能特点,Oracle的最新JVM版本和最新的Java编译器版本也有一些性能特点,但这并不能说明C#或Java“总体上”是怎样的。C# 2.0编译器怎么样?Mono C#编译器呢?
比较语言的性能是没有意义的。语言没有速度。

0
我个人会专注于一些最常见和日常任务 - 循环,字符串操作,数组/列表,整数和浮点计算,文件操作。对于测量,您可以在C#中使用Stopwatch(最精确的本机.NET测量解决方案)。我不了解Java,但也有一个StopWatch类,其目的应该是相同的。

0

首先,阅读这里 - 是的,其中包括一个链接的文章(好吧,这篇文章很棒)。如果你不这样做,我们可以在这里停止,因为你只会测量垃圾。而且,这个问题在某种程度上也存在于C#中。

此外,这取决于你用C#来衡量什么 - 使用不安全代码可能会在性能上带来良好的改进,但代价是基本上所有非托管语言的缺点。还有你用于程序的开关 - 不使用-server对于Java来说是一个真正好的主意,让C#看起来比它更好 ;)

什么是合理的基准?一些简单的数学问题通常很好展示(两个JIT都很擅长做这件事,所以不要指望有太大的差异 - 这也是一个答案)。然后可能是一些基准测试,展示JIT在优化方面的表现如何 - CSE、虚拟内联等。这可能取决于你对优化的了解程度。

另外,测试完整/部分垃圾收集运行的延迟/时间肯定是有趣的。


0
我的假设是,在Windows上,C#的执行时间比Java的执行时间更快,因为C#是由Microsoft开发的。
您的措辞在这里不太清楚。怀疑的原因是否是假设的一部分?那么,您将不得不验证如果C#不是由Microsoft编写的话,它会变成什么样子。要以任何可靠的程度实现适用于Windows的C#,需要从头开始编写。
此外,“C#执行时间比Java执行时间更快”这个说法并没有很好地定义:执行时间是指什么?很可能有一些领域/程序,C#优于Java,而其他领域则Java优于C#。
为了使假设可测试,您需要缩小范围,例如针对特定程序,该程序可以在任何一种编程语言中几乎不改变地实现,在特定输入、特定JVM / CLR实现、特定计算机上运行。是的,这个声明可能不太有用,但至少它是可测试的。

我的问题不是很清楚。我的意思是,在我正在寻求想法的领域中,C# 的执行时间比 Java 更快。 - Kenci

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