我对 Project Euler problem 5 有几种不同的解决方案,但是在这个特定的实现中两种语言/平台之间的执行时间差异让我很感兴趣。我没有对编译器标志进行任何优化,只是简单的 javac
(通过命令行)和 csc
(通过 Visual Studio)。
这是 Java 代码。它在 55 毫秒内完成。
public class Problem005b
{
public static void main(String[] args)
{
long begin = System.currentTimeMillis();
int i = 20;
while (true)
{
if (
(i % 19 == 0) &&
(i % 18 == 0) &&
(i % 17 == 0) &&
(i % 16 == 0) &&
(i % 15 == 0) &&
(i % 14 == 0) &&
(i % 13 == 0) &&
(i % 12 == 0) &&
(i % 11 == 0)
)
{
break;
}
i += 20;
}
long end = System.currentTimeMillis();
System.out.println(i);
System.out.println(end-begin + "ms");
}
}
这是相同的 C# 代码。它在 320 毫秒内完成
using System;
namespace ProjectEuler05
{
class Problem005
{
static void Main(String[] args)
{
DateTime begin = DateTime.Now;
int i = 20;
while (true)
{
if (
(i % 19 == 0) &&
(i % 18 == 0) &&
(i % 17 == 0) &&
(i % 16 == 0) &&
(i % 15 == 0) &&
(i % 14 == 0) &&
(i % 13 == 0) &&
(i % 12 == 0) &&
(i % 11 == 0)
)
{
break;
}
i += 20;
}
DateTime end = DateTime.Now;
TimeSpan elapsed = end - begin;
Console.WriteLine(i);
Console.WriteLine(elapsed.TotalMilliseconds + "ms");
}
}
}
最佳答案
- 要计时代码执行,您应该使用
StopWatch
类。 - 此外,您还必须考虑 JIT、运行时等因素,因此让测试运行足够的次数(如 10,000、100,000 次)并获得某种平均值。多次运行代码很重要,不是程序。因此,请编写一个方法,然后在 main 方法中循环以获取您的测量结果。
- 从程序集中删除所有调试内容,让代码在发布版本中独立运行
关于java - 为什么这个 Java 代码比相同的 C# 代码快 6 倍?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5952287/