java - 为什么这个 Java 代码比相同的 C# 代码快 6 倍?

标签 java c# execution-time

我对 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");
        }
    }
}

最佳答案

  1. 要计时代码执行,您应该使用 StopWatch类。
  2. 此外,您还必须考虑 JIT、运行时等因素,因此让测试运行足够的次数(如 10,000、100,000 次)并获得某种平均值。多次运行代码很重要,不是程序。因此,请编写一个方法,然后在 main 方法中循环以获取您的测量结果。
  3. 从程序集中删除所有调试内容,让代码在发布版本中独立运行

关于java - 为什么这个 Java 代码比相同的 C# 代码快 6 倍?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5952287/

相关文章:

java - 解析具有重复键的 json

java - SSL : Received fatal alert: handshake_failure

c# - 如何防止在c#中最大化无状态形式

java - printf 始终显示 0 处理器时间作为输出

java - 如何以精确控制的执行时间启动 Java 程序?

java - 如何在 Java 中删除分数中的 "0,"?

java - oracle XMLType 在数据库中不起作用

c - 下面哪一段代码执行速度更快?

c# - 您如何将验证消息组合在一起?

c# - .NET Compact Framework 3.5 是否有 BackgroundWorker 替代品?