RT
下面是相同“循环热点”的Java 和 C#代码,为本程序测试了20多次,都是在彼此互不干扰的环境下(不同时开)
Java比C#耗时每次都少, 平均起来少33.34秒Java结果打印:
13:41:35:718
13:43:3:609
耗时:88秒C#结果打印:
13:41:29:218
13:43:25:203
耗时:116秒下面是Java代码import java.util.*;public class Myexe { public static int subCld(Calendar cld1, Calendar cld2) {
int msec = 0; msec = (cld1.get(Calendar.HOUR_OF_DAY) - cld2.get(Calendar.HOUR_OF_DAY)) * 3600;
msec += (cld1.get(Calendar.MINUTE) - cld2.get(Calendar.MINUTE)) * 60;
msec += cld1.get(Calendar.SECOND) - cld2.get(Calendar.SECOND); return msec;
} public static void main(String[] args) {
Calendar cld1 = Calendar.getInstance();
System.out.println(cld1.get(Calendar.HOUR_OF_DAY) + ":"
+ cld1.get(Calendar.MINUTE) + ":" + cld1.get(Calendar.SECOND) + ":"
+ cld1.get(Calendar.MILLISECOND));
for (int i = 0; i < 100000; i++)
for (int j = 0; j < 300000; j++)
;
Calendar cld2 = Calendar.getInstance();
System.out.println(cld2.get(Calendar.HOUR_OF_DAY) + ":"
+ cld2.get(Calendar.MINUTE) + ":" + cld2.get(Calendar.SECOND) + ":"
+ cld2.get(Calendar.MILLISECOND));
System.out.println("耗时:" + subCld(cld2, cld1) + "秒");
}}
下面是C#代码using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace ConsoleApplication2 {
class Program {
public static int CalTime(int[] intarr1, int[] intarr2) {
int sec;
sec = (intarr1[0] - intarr2[0]) * 3600;
sec += (intarr1[1] - intarr2[1]) * 60;
sec += intarr1[2] - intarr2[2];
return sec;
} static void Main(string[] args) {
int[] ta1 = new int[3], ta2 = new int[3];
ta1[0] = DateTime.Now.Hour;
ta1[1] = DateTime.Now.Minute;
ta1[2] = DateTime.Now.Second;
Console.WriteLine(DateTime.Now.Hour + ":" + DateTime.Now.Minute + ":" + DateTime.Now.Second + ":" + DateTime.Now.Millisecond);
for (int i = 0; i < 100000; i++)
for (int j = 0; j < 300000; j++)
;
Console.WriteLine(DateTime.Now.ToShortTimeString() + ":" + DateTime.Now.Second.ToString() + ":" +
DateTime.Now.Millisecond.ToString());
ta2[0] = DateTime.Now.Hour;
ta2[1] = DateTime.Now.Minute;
ta2[2] = DateTime.Now.Second;
Console.WriteLine("耗时:" + CalTime(ta2, ta1) + "秒");
Console.ReadKey(false);
}
}
}
下面是相同“循环热点”的Java 和 C#代码,为本程序测试了20多次,都是在彼此互不干扰的环境下(不同时开)
Java比C#耗时每次都少, 平均起来少33.34秒Java结果打印:
13:41:35:718
13:43:3:609
耗时:88秒C#结果打印:
13:41:29:218
13:43:25:203
耗时:116秒下面是Java代码import java.util.*;public class Myexe { public static int subCld(Calendar cld1, Calendar cld2) {
int msec = 0; msec = (cld1.get(Calendar.HOUR_OF_DAY) - cld2.get(Calendar.HOUR_OF_DAY)) * 3600;
msec += (cld1.get(Calendar.MINUTE) - cld2.get(Calendar.MINUTE)) * 60;
msec += cld1.get(Calendar.SECOND) - cld2.get(Calendar.SECOND); return msec;
} public static void main(String[] args) {
Calendar cld1 = Calendar.getInstance();
System.out.println(cld1.get(Calendar.HOUR_OF_DAY) + ":"
+ cld1.get(Calendar.MINUTE) + ":" + cld1.get(Calendar.SECOND) + ":"
+ cld1.get(Calendar.MILLISECOND));
for (int i = 0; i < 100000; i++)
for (int j = 0; j < 300000; j++)
;
Calendar cld2 = Calendar.getInstance();
System.out.println(cld2.get(Calendar.HOUR_OF_DAY) + ":"
+ cld2.get(Calendar.MINUTE) + ":" + cld2.get(Calendar.SECOND) + ":"
+ cld2.get(Calendar.MILLISECOND));
System.out.println("耗时:" + subCld(cld2, cld1) + "秒");
}}
下面是C#代码using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace ConsoleApplication2 {
class Program {
public static int CalTime(int[] intarr1, int[] intarr2) {
int sec;
sec = (intarr1[0] - intarr2[0]) * 3600;
sec += (intarr1[1] - intarr2[1]) * 60;
sec += intarr1[2] - intarr2[2];
return sec;
} static void Main(string[] args) {
int[] ta1 = new int[3], ta2 = new int[3];
ta1[0] = DateTime.Now.Hour;
ta1[1] = DateTime.Now.Minute;
ta1[2] = DateTime.Now.Second;
Console.WriteLine(DateTime.Now.Hour + ":" + DateTime.Now.Minute + ":" + DateTime.Now.Second + ":" + DateTime.Now.Millisecond);
for (int i = 0; i < 100000; i++)
for (int j = 0; j < 300000; j++)
;
Console.WriteLine(DateTime.Now.ToShortTimeString() + ":" + DateTime.Now.Second.ToString() + ":" +
DateTime.Now.Millisecond.ToString());
ta2[0] = DateTime.Now.Hour;
ta2[1] = DateTime.Now.Minute;
ta2[2] = DateTime.Now.Second;
Console.WriteLine("耗时:" + CalTime(ta2, ta1) + "秒");
Console.ReadKey(false);
}
}
}
“C#并不被编译成为能够直接在计算机上执行的二进制本地代码。与Java类似,它被编译成为中间代码(Microsoft Intermediate Language),然后通过.NET Framework的虚拟机——被称之为通用语言运行庫(Common Language Runtime)——执行。所有的.Net编程语言都被编译成这种被称为MSIL(Microsoft Intermediate Language )的中间代码。因此虽然最终的程序在表面上仍然与传统意义上的可执行文件都具有“.exe”的后缀名。但是实际上,如果计算机上没有安装.Net Framework,那么这些程序将不能够被执行。在程序执行时,.Net Framework将中间代码翻译成为二进制机器码,从而使它得到正确的运行。最终的二进制代码被存储在一个缓冲区(Buffer)中。所以一旦程序使用了相同的代码,那么将会调用缓冲区中的版本。这样如果一个.Net程序第二次被运行,那么这种翻译不需要进行第二次,速度明显加快。
”
我没看出来。
要比是要在同等条件下比,不要使用特性。
在你上面的例子中
public static int subCld(Calendar cld1, Calendar cld2)
public static int CalTime(int[] intarr1, int[] intarr2)
它们相等了吗?System.out.println(cld1.get(Calendar.HOUR_OF_DAY) + ":"
+ cld1.get(Calendar.MINUTE) + ":" + cld1.get(Calendar.SECOND) + ":"
+ cld1.get(Calendar.MILLISECOND));Console.WriteLine(DateTime.Now.Hour + ":" + DateTime.Now.Minute + ":" + DateTime.Now.Second + ":" + DateTime.Now.Millisecond);
这两个相等了?
比较的方法要专业一点。
看我下面的一个例子:
Java与C#执行效率之不科学比较
public static void main(String[] args)
{
long start=System.currentTimeMillis();
for (int i = 0; i < 100000; i++)
for (int j = 0; j < 300000; j++)
;
long end=System.currentTimeMillis();
System.out.println("执行了"+(end-start)+"毫秒");
}
}using System;
class Program
{
static void Main(string[] args)
{
DateTime start=DateTime.Now;
for (int i = 0; i < 100000; i++)
for (int j = 0; j < 300000; j++)
;
DateTime end=DateTime.Now;
TimeSpan ts=end-start;
Console.WriteLine("执行了"+ts.TotalMilliseconds+"毫秒");
}
}
java更下坡了吧,都卖给oracle了
“System.out.println(cld1.get(Calendar.HOUR_OF_DAY) + ":"
+ cld1.get(Calendar.MINUTE) + ":" + cld1.get(Calendar.SECOND) + ":"
+ cld1.get(Calendar.MILLISECOND));Console.WriteLine(DateTime.Now.Hour + ":" + DateTime.Now.Minute + ":" + DateTime.Now.Second + ":" + DateTime.Now.Millisecond);
这两个相等了?”
敢问哪个更快? 我倒觉得C#的这段代码更快 你说呢?可结果呢?这不反而说明C#for里面更慢??
不同意楼上说的,卖给oracle不能就说走下坡路了啊,找到新家可能才更有前途
+1,差异不在代码里,但是两个测试并不公平,没有比较相应的java参数能信息
#include <stdio.h>
#include <stdlib.h>
#include <time.h>int main(void) {
long start, end;
int i, j;
start = clock();
for(i = 0; i < 100000; i++) {
for(j = 0; j < 300000; j++);
}
end = clock();
printf("%.2f s\n", (end - start) / 1000.0);
return 0;
}F:\test>gcc -c test.cF:\test>gcc -otest.exe test.oF:\test>test
99.89 sF:\test>type Test.java
public class Test {
public static void main(String[] args) {
long t0, t1;
t0 = System.currentTimeMillis();
for(int i = 0; i < 100000; i++) {
for(int j = 0; j < 300000; j++);
}
t1 = System.currentTimeMillis();
System.out.printf("%.2f s%n", (t1 - t0) / 1000.0);
}
}F:\test>javac Test.javaF:\test>java Test
18.76 s
java 和c#不相同的.
java 的IDE工具没有MS的IDE工具好用.什么时候中国弄个d语言,或者e语言出来,而且大家在这里讨论才好.
其实说到快,你用c写出来的才快.
高级语言都帮你封装的好好的. 那些操作cpu 和内存的指令集的才叫快.
微软做的操作系统就让你左点点,右点点就搞定.
他的软件也是这种. 跟j哥和微哥混那个都一样.
一言难尽.