Java和C#運行速度對比:Java比C#快約3倍


測試條件:

Java版本: Java 8,

.NET版本:v4.0, Release模式,針對x86平台優化

單線程模式。

 

測試1:(測試1的代碼摘自http://blog.csdn.net/houjin_cn/article/details/5957432

Java代碼:

 

package javatest;

public class temp
{
    public static void main(String[] args)
    {
        long nn = System.nanoTime();
        int times = 9999;
        factorial(times);
        nn = System.nanoTime() - nn;// 單位為ns(納秒,即10的負9次方秒),
        System.out.println((nn / 1000000) + " ms");
    }

    private final static void factorial(int n)
    {
        int[] bs = new int[16384];
        int top = 1;
        bs[0] = 1;
        for (int i = 2; i <= n; i++)
        {
            int w = 0;
            for (int ic = 0; ic < top; ic++)
            {
                int tn = bs[ic];
                tn = tn * i + w;
                w = tn >>> 16;
                bs[ic] = tn & 0xffff;
            }
            if (w != 0)
            {
                bs[top++] = w;
            }
        }
    }
}

 

 

C#代碼:

 

static void Main(string[] args)
{
   long nn = System.DateTime.Now.Ticks;
   factorial(9999);
   nn = System.DateTime.Now.Ticks - nn;// 單位為刻度數,1刻度數=10的負7次方秒
   System.Console.Out.Write((nn / 10000) + " ms");
   System.Console.Out.WriteLine();
   Console.Read();
}

static void factorial(int n)
{
 int[] bs = new int[16384];
 int top = 1;
 bs[0] = 1;
 for (int i = 2; i <= n; i++)
 {
   int w = 0;
   for (int ic = 0; ic < top; ic++)
   {
     int tn = bs[ic];
     tn = tn * i + w;
     w = tn >> 16;
     bs[ic] = tn & 0xffff;
   }
   if (w != 0)
   {
     bs[top++] = w;
   }
 }
}

 

 

 

測試結果

Java:

C#:



結論1Java速度是C#2.8

 

 

測試2:同一個函數,執行兩億次。

Java代碼(省略了打印):

package javatest;

import java.text.DecimalFormat;
import java.util.Date;

public class speedTest
{
    public static void main(String[] args)
    {
        int i = 0;
        int max = 200000000;//兩億次
        Date start = new Date();
        while (i++ < max)
        {
            transform();
        }
        Date end = new Date();
        long diff = end.getTime() - start.getTime();
        
        StringBuffer maxToshow=new StringBuffer();
        maxToshow.append(max);
        int count=0;
        for(int a=1;a<String.valueOf(max).length();a++)
        {
            if(a%3==0)
            {
                count++;
                maxToshow.insert(String.valueOf(max).length()-count*3, ",");
            }
        }
        //String s = String.format("it takes %f seconds to run %s loops",
        //        diff / 1000.00, new DecimalFormat(",###").format(max));
        String s = String.format("it takes %f seconds to run %s loops",
                diff / 1000.00, maxToshow.toString());
        System.out.println(s);
    }

    public static void transform()
    {
        String str = "Pcybgle rfgq rsrmpgyj fyq npmzyzjw pcgldmpacb wmsp glrcpcqr gl sqgle Nwrfml - wms qfmsjb zc cyecp rm ynnjw Nwrfml rm qmjtgle wmsp pcyj-umpjb npmzjckq. Ufcpc qfmsjb wms em rm jcypl kmpc?";
        for (int i = 0; i < str.length(); i++)
        {
            char c = str.charAt(i);
            if (c >= 'a' && c <= 'z')
            {
                c += 2;
                if (c > 'z')
                {
                    c -= 26;
                }
                // System.out.print(c);
            }

            else if (c >= 'A' && c <= 'Z')
            {
                c += 2;
                if (c > 'Z')
                {
                    c -= 26;
                }
                // System.out.print(c);
            }
            else
                ;// System.out.print(c);
        }
    }
}

 

C#代碼(省略了打印)

 

static void Main(string[] args)
    {
        int i = 0;
        int max = 200000000;// 兩億次
        DateTime start = DateTime.Now;
        while (i++ < max)
        {
            transform();
        }
        Console.WriteLine();
        DateTime end = DateTime.Now;
        Console.WriteLine("it takes {0} seconds to run {1} loops",
                (end - start).TotalSeconds, max);
        Console.Read();
    }

    public static void transform()
    {
        String str = "Pcybgle rfgq rsrmpgyj fyq npmzyzjw pcgldmpacb wmsp glrcpcqr gl sqgle Nwrfml - wms qfmsjb zc cyecp rm ynnjw Nwrfml rm qmjtgle wmsp pcyj-umpjb npmzjckq. Ufcpc qfmsjb wms em rm jcypl kmpc?";
        for (int i = 0; i < str.Length; i++)
        {
            int c = str[i];
            if (c >= 'a' && c <= 'z')
            {
                c += 2;
                if (c > 'z')
                {
                    c -= 26;
                }
                // Console.Write((char)c);
            }
            else if (c >= 'A' && c <= 'Z')
            {
                c += 2;
                if (c > 'Z')
                {
                    c -= 26;
                }
                // Console.Write((char)c);
            }
            else
                ;// Console.Write((char)c);
        }
    }

 

 

 

 

 

 

測試結果:

Java:

C#:

 

結論2Java速度是C#3.74倍:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM