測試條件:
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#:
結論1:Java速度是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#:
結論2:Java速度是C#的3.74倍: