比比Java和C#语言运行的快慢

前言:闲来无事,在图书馆随便看看书,发现不论是在论坛还是写书的作者都喜欢将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();
        }
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45

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);
    }
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

结果

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);
            }
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

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);
        }
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
结果

这时候的结果却是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#能够在服务器端快速成长起来,更多的开发者,更多的开源,更多的支持。


最后,这只是一个空穴来风的作死,只是我空穴来风的一点看法,从我的角度出发,思考当然不够全面,权当满足下我的好奇心吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值