比比Java和C#语言运行的快慢
来源:互联网 发布:火灾发生频率数据 编辑:程序博客网 时间:2024/04/27 20:24
前言:闲来无事,在图书馆随便看看书,发现不论是在论坛还是写书的作者都喜欢将Java和C#拿来比较一番。谈论语言的是非。所以我决定,从语言的运行快慢来比较一下究竟哪种语言快些。
一、代码测试时间对比
C#代码测试
测试代码如下:
/************************************************************************/ /* C#与Java执行速度比较比较 * C#版本.net 4.0,Java版本jdk1.8 * 执行过程: * 1.for循环执行1000次new和算术运算 * 2.文件读写1000次,并存储到集合当中 /************************************************************************/ static void Main(string[] args) { Stopwatch watch = new Stopwatch(); watch.Start(); //1.for循环执行1000次new和算术运算 List<String> list = new List<String>(); for (int i = 0; i < 100000;i++ ) { StringBuilder str = new StringBuilder(); str.Append("hello world." + i); int a = 11 + i; float b = 11.1F + i; double d = 22.2D + i; double e = a + b + b * d + d / a; //long f = 22L; //long e = a + f + a * f + f / a; list.Add(e.ToString()); } //2.文件读写1000次,并存储到集合当中 string file = "D:\\CSharp.txt"; StreamWriter sw = new StreamWriter(file); ; for (int j = 0; j < 100000; j++) { String s = "hello world. " + list[j]; sw.WriteLine(s); } sw.Flush(); sw.Close(); watch.Stop(); Console.WriteLine("Elapsed: {0}", watch.Elapsed); Console.WriteLine("In milliseconds: {0}", watch.ElapsedMilliseconds); Console.WriteLine("In timer ticks: {0}", watch.ElapsedTicks); Console.ReadLine(); //StreamWriter sw1 = new StreamWriter(file); ; //sw1.WriteLine("In milliseconds: {0}" , watch.Elapsed); //sw1.WriteLine("In timer ticks: {0}",watch.ElapsedMilliseconds); //sw1.Close(); }
Java代码测试
测试代码如下:
public static void main(String[] args) throws Exception{ long startTime, endTime; startTime = System.currentTimeMillis(); //1.for循环执行1000次new和算术运算 List<String> list = new ArrayList<String>(); for (int i = 0; i < 100000;i++ ) { StringBuilder str = new StringBuilder(); str.append("hello world." + i); int a = 11 + i; float b = 11.1F + i; double d = 22.2D + i; Double e = a + b + b * d + d / a;// long f = 22L;// Long e = a + f + a * f + f / a; list.add(e.toString()); } //2.文件读写1000次,并存储到集合当中 File file = new File("D:\\Java.txt"); PrintWriter bw = new PrintWriter(file);; for (int j = 0; j < 100000;j++ ) { String s = "hello world. " + list.get(j); bw.println(s); } bw.flush(); bw.close(); endTime = System.currentTimeMillis(); System.out.println(endTime - startTime); }
结果
C#平均时间:150-200毫秒
Java平均时间:220-300毫秒
上面只测试了算术运算和文件写入操作,要 真正的对比远远不只有这些,我只想从一个小的角度来切入,测试过程中有几个值得说的地方,首先,java浮点运算位数比C#多一位。经过测试C#的浮点运算的确要比java高一点,不知道为啥,知道的可以告诉我一下。
一个奇怪的问题是,当我们使用控制台输出的时候,java的运行速度要明显比C#快。我是这样测试的,将算术循环中的list转到读取中,然后输出到控制台计算结果,文件读取的代码如下:
C#:
StreamReader sr = new StreamReader(file); List<String> list = new List<String>(); String str1; while ((str1 = sr.ReadLine()) != null) { list.Add(str1); } sr.Close(); foreach (String s in list) { Console.WriteLine(s); }
Java:
FileInputStream fStream = new FileInputStream(file); InputStreamReader reader = new InputStreamReader(fStream, "UTF-8");//将InputSteam转换成Reader BufferedReader in = new BufferedReader(reader); //只提供缓冲区的包装方法 List<String> list = new ArrayList<String>(); String buffer; while ((buffer = in.readLine()) != null) { list.add(buffer); } fStream.close(); reader.close(); in.close(); for (String l : list) { System.out.println(l); }
结果
这时候的结果却是java快于C#!可以确定的是java的算术运算和文件写入速度比C#慢的,但是为什么输出到控制台的时候就会快于C#呢。知道的可以告诉下我,不过我就不想深究了。
我不知道我这种比较方法是否合理,是否考虑周全,但是结果还是能说明一点问题的,就像对于java中 String s = "hello " + "world." + 1
的这个测试一样,有的人认为要比Stringbuilder慢,但是有的人,认为二者一样(他认为在编译器优化阶段将其优化成了StringBuilder的表示或优化成了字符串常量,我也比教同意这个看法)(如果没有编译器的优化肯定是StringBuilder的字符串连接操作快些的)。
我的看法
菜鸟我的看法:把java和C#拿来对比其实真的没有什么意思,我对java和C#没有傲慢和偏见;java庞大的开源社区、开源项目,庞大的开发群体,数不清的优秀资源,是java的优点;而C#的特点在于它超强,超优美的语言,使用起来相当的舒服,简洁,高效,而且还有宇宙最强IDE。
这里我只测试了算术运算和文件读写,目的只是开个头,语言层面C#的确优于java这个任何人也无法否认!而且性能略占上风,仅此而已。但是C#想要挑战Java在web服务器端的地位几乎是不可能的,呵呵,java想挑战C#在Windows下的桌面应用似乎也是不可能的,更何况go语言也来了。互联网时代,桌面应用似乎越来越少了~~~实在为C#感到一丝丝的遗憾啊!
但是,最后我想说的是如果微软早一点开源.net,早一点支持跨平台,C#不至于今天这么难堪,java也不会这么火!这只是假设,但我还是希望C#能够在服务器端快速成长起来,更多的开发者,更多的开源,更多的支持。
最后,这只是一个空穴来风的作死,只是我空穴来风的一点看法,从我的角度出发,思考当然不够全面,权当满足下我的好奇心吧。
- 比比Java和C#语言运行的快慢
- 编程语言的运行效率问题?C++:java/C#
- Java和c#开发语言的不同点
- C语言快慢指针
- C语言快慢指针
- 比比谁更无聊:Whitespace语言
- 快慢链表和快慢指针
- Java和C#运行命令行的例子对比
- Java和C#运行命令行的例子对比
- Java和C#运行命令行的例子对比
- Java和C#运行命令行的例子对比
- C#的动态语言运行时DLR
- [story]Java写文件3种方法的快慢
- 关于尾插法的优化和快慢指针查找中间节点
- 删除表所有数据的sql语句,和效率快慢
- 我的快慢法则
- 算法增长的快慢
- 快慢指针的应用
- Gitosis配置
- 10061 - How many zero's and how many digits ?
- Logback与Log4J的区别
- RMI基础知识
- maven项目建立
- 比比Java和C#语言运行的快慢
- class_create(),device_create自动创建设备文件结点
- 在window7下安装mysql
- 用归并排序处理逆序对问题
- 【Error】Python:SyntaxError: Non-ASCII character '\xe5'解决方法
- 在Linux编写程序arm程序,通过usb烧写在Android系统中安装和运行C程序
- II Hash Table: 2. Longest Substring Without Repeating Characters
- Leetcode: Bulb Switcher
- 九度OJ 1366(栈操作) 1367(二叉树遍历) 1368(二叉树路径) 1369(字符串全排列) 1370(特殊数字查找)