评测报告:.NET的性能仍然远远落后于Java

新闻评论 专栏收录该内容
33 篇文章 0 订阅

评测报告:.NET的性能仍然远远落后于Java

每个人都看过各种不同的benchmark,有证明.NETJava快的,也有证明Java.NET快的。在某些人的手里,benchmark是一面魔镜,透过它能看到想看的东西。所以,当这位名为Cameron的先生要开始在.NETJava之间做一个benchmark时,他认为自己就是在浪费时间,因为肯定会有人来证明.NETJava快。

顺便地,Cameron先生提出了10条“不要用于在.NETJava之间做选择”的理由,其中包括:

Ø         在某一组特定的benchmark中,某一个比另一个快一点;

Ø         MicrosoftSun(或者OracleIBM……)的报告说其中一个比另一个好得多;

Ø         你喜欢(或不喜欢)Bill Gates或者Scott McNeally(或者Larry Ellison);

Ø         你认为Microsoft或者Sun(或者IBM或者Oracle)很邪恶(或者很伟大);

Ø         你在TheServerSide.com或者GotDotNet.com(或者Microsoft.com)读了一篇“没有偏见”的文章;

实际上,这次benchmark源于CamerontRolf两人在TheServerSide.com网站的一次关于Web服务性能的争吵(http://www.theserverside.com/reviews/thread.jsp?thread_id=19226)。在这次的benchmark中,Cameron测试了下列版本:

.NET 1.0sp2:
    
Microsoft (R) Visual C# .NET Compiler version 7.00.9466
     
for Microsoft (R) .NET Framework version 1.0.3705
     
Copyright (C) Microsoft Corporation 2001. All rights reserved.
    
.NET 1.1:
    
Microsoft (R) Visual C# .NET Compiler version 7.10.3052.4
     
for Microsoft (R) .NET Framework version 1.1.4322
     
Copyright (C) Microsoft Corporation 2001-2002. All rights reserved.
    
Sun Hotspot Server JVM from JDK 1.3.1_04:
    
java version "1.3.1_04"
     
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1_04-b02)
     
Java HotSpot(TM) Server VM (build 1.3.1_04-b02, mixed mode)
    
Sun Hotspot Server JVM from JDK 1.4.0_02:
    
java version "1.4.0_02"
     
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0_02-b02)
     
Java HotSpot(TM) Server VM (build 1.4.0_02-b02, mixed mode)
    
Sun Hotspot Server JVM from JDK 1.4.1_02:
    
java version "1.4.1_02"
     
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.1_02-b06)
     
Java HotSpot(TM) Client VM (build 1.4.1_02-b06, mixed mode)
    

在代码方面,Cameron主要选择了大量ArrayList来进行测试。下列是他的测试代码:

C#

// C# Create 100,000 people in an ArrayList and access them

using System;

using System.Collections;

 

public class ManyPeople

{

  public static void Main()

  {

    for (int i = 0; i < 100; i++)

      test(i);

  }

 

  public static void test(int iIter)

  {

    DateTime start = DateTime.Now;

    for (int i = 0; i < 20; i++)

      new ManyPeople().Average();

    DateTime finish = DateTime.Now;

    Console.WriteLine("Total time for iteration " + iIter + ": " + (finish - start));

  }

 

  private long Average()

  {

    ArrayList list = new ArrayList(100000);

    for (int i = 0; i < 100000; i++)

      list.Add(new Person(i, "John " + i));

 

    long silly = 0;

    foreach (Person p in list)

      silly += p.Id;

    return silly / 100000;

  }

}

 

// Person.cs: a very simple guy

public class Person

{

  int id;

  string name;

 

  public Person(int anId, string aName)

  {

    this.id = anId;

    this.name = aName;

  }

 

  public int Id

  {

    get { return this.id; }

  }

}

Java:

// Java Create 100,000 people in an ArrayList and access them

import java.util.*;

 

public class ManyPeople

{

  public static void main(String[] args)

  {

    for (int i = 0; i < 100; i++)

      test(i);

  }

 

  public static void test(int iIter)

  {

    long start = System.currentTimeMillis();

    for (int i = 0; i < 20; i++)

      new ManyPeople().average();

    long finish = System.currentTimeMillis();

    System.out.println("Total time for iteration " + iIter + ": " + (finish - start));

  }

 

  private long average()

  {

    ArrayList list = new ArrayList(100000);

    for (int i = 0; i < 100000; i++)

      list.add(new Person(i, "John " + i));

 

    long silly = 0;

    for (int i = 0; i < 100000; i++)

      silly += ((Person)list.get(i)).getId();

    return silly;

  }

}

 

// Person.java: a very simple guy

class Person

{

  private int id;

  private String name;

 

  public Person(int anId, String aName)

  {

    this.id = anId;

    this.name = aName;

  }

 

  public int getId()

  {

    return this.id;

  }

}

Cameron所用的测试机器是P3 1GHz1G内存的笔记本,操作系统是Windows 2000 SP2。下列是在.NET上测试的结果(取最好的6次):

.NET 1.0sp2:

ManyPeople
    
Total time for iteration 0: 00:00:07.3004976
    
Total time for iteration 1: 00:00:07.0501376
    
Total time for iteration 2: 00:00:07.2504256
    
Total time for iteration 3: 00:00:07.7311168
    
Total time for iteration 4: 00:00:07.5007856
    
Total time for iteration 5: 00:00:07.5007856
    

.NET 1.1:

ManyPeople
     
Total time for iteration 0: 00:00:08.0916352
    
Total time for iteration 1: 00:00:08.5222544
    
Total time for iteration 2: 00:00:08.3520096
    
Total time for iteration 3: 00:00:08.6324128
    
Total time for iteration 4: 00:00:08.3419952
    
Total time for iteration 5: 00:00:08.1617360
    

可以看到,同样的代码在.NET 1.1上比.NET 1.0 SP2上慢了大约15%。这是一个很奇怪的现象。并且,Cameron观察到,.NET上同样代码的运行速度并不随运行次数的增加而提高,说明.NET CLR只是简单地进行了JIT编译。而在Hotspot Server上,不仅开始时的性能就有优势,而且速度还会不断提高:

Sun Hotspot Server JVM from JDK 1.4.1_02:

java -server -Xms128m -Xmx128m ManyPeople
     
Total time for iteration 0: 6370
    
Total time for iteration 1: 5788
    
Total time for iteration 2: 5868
    
Total time for iteration 3: 6029
    
Total time for iteration 4: 5748
    
Total time for iteration 5: 5738
    
Total time for iteration 6: 5729
    
Total time for iteration 7: 5948
    
Total time for iteration 8: 5688
    
Total time for iteration 9: 5679
    
Total time for iteration 10: 5658
    
Total time for iteration 11: 6028
    
Total time for iteration 12: 5699
    
Total time for iteration 13: 5708
    
Total time for iteration 14: 5678
    
Total time for iteration 15: 5969
    
Total time for iteration 16: 5628
    
Total time for iteration 17: 5538
    
Total time for iteration 18: 5608
    
Total time for iteration 19: 5498
    
Total time for iteration 20: 5768
    
Total time for iteration 21: 5518
    
Total time for iteration 22: 5307
    
Total time for iteration 23: 4247
    
Total time for iteration 24: 4696
    
Total time for iteration 25: 4617
    
Total time for iteration 26: 4777
    
Total time for iteration 27: 4286
    
Total time for iteration 28: 4677
    
Total time for iteration 29: 4626
    
Total time for iteration 30: 4697
    
Total time for iteration 31: 4286
    
Total time for iteration 32: 4697
    
Total time for iteration 33: 4617
    
Total time for iteration 34: 4696
    
Total time for iteration 35: 4307
    
Total time for iteration 36: 4686
    
Total time for iteration 37: 4807
    
Total time for iteration 38: 4517
    
Total time for iteration 39: 4306
    
Total time for iteration 40: 4657
    
Total time for iteration 41: 4807
    
Total time for iteration 42: 4596
    
Total time for iteration 43: 4206
    
Total time for iteration 44: 4777
    
Total time for iteration 45: 4717
    
Total time for iteration 46: 4607
    
Total time for iteration 47: 4196
    
Total time for iteration 48: 4796
    
Total time for iteration 49: 4707
    
Total time for iteration 50: 4777
    
Total time for iteration 51: 4196
    
Total time for iteration 52: 4627
    
Total time for iteration 53: 4687
    
Total time for iteration 54: 4806
    
Total time for iteration 55: 4186
    
Total time for iteration 56: 4627
    
Total time for iteration 57: 4697
    
Total time for iteration 58: 4807
    
Total time for iteration 59: 4166
    
Total time for iteration 60: 4616
    
Total time for iteration 61: 4697
    
Total time for iteration 62: 4717
    
Total time for iteration 63: 4346
    
Total time for iteration 64: 4717
    
Total time for iteration 65: 4617
    
Total time for iteration 66: 4626
    
Total time for iteration 67: 4367
    
Total time for iteration 68: 4706
    
Total time for iteration 69: 4617
    
Total time for iteration 70: 4617
    
Total time for iteration 71: 4366
    
Total time for iteration 72: 4687
    
Total time for iteration 73: 4616
    
Total time for iteration 74: 4196
    
Total time for iteration 75: 4787
    
Total time for iteration 76: 4687
    
Total time for iteration 77: 4807
    
Total time for iteration 78: 4436
    
Total time for iteration 79: 4387
    
Total time for iteration 80: 4676
    
Total time for iteration 81: 4807
    
Total time for iteration 82: 4417
    
Total time for iteration 83: 4296
    
Total time for iteration 84: 4686
    
Total time for iteration 85: 4797
    
Total time for iteration 86: 4266
    
Total time for iteration 87: 4697
    
Total time for iteration 88: 4617
    
Total time for iteration 89: 4717
    
Total time for iteration 90: 4276
    
Total time for iteration 91: 4707
    
Total time for iteration 92: 4616
    
Total time for iteration 93: 4697
    
Total time for iteration 94: 4296
    
Total time for iteration 95: 4677
    
Total time for iteration 96: 4546
    
Total time for iteration 97: 4697
    
Total time for iteration 98: 4296
    
Total time for iteration 99: 4677
    

可以看到,随着运行次数的增加,Sun Hotspot Server不断将领先优势拉大,最后几乎比.NET 1.1快了一倍。.NET CLR始终无法将运行时间降低到8秒以下,而Sun Hotspot Server在多次运行之后则可以保持在5秒以下。因此,Cameron认为,对于大运算量的应用程序,Hotspot JVMMicrosoft CLR要快得多。

原文及完整的benchmark数据请看Cameronblog

http://www.freeroller.net/page/cpurdy/20030516

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
<p> <span style="font-size:14px;color:#337FE5;">【为什么学爬虫?】</span> </p> <p> <span style="font-size:14px;">       1、爬虫入手容易,但是深入较难,如何写出高效率爬虫,如何写出灵活性高可扩展爬虫都是一项技术活。另外在爬虫过程中,经常容易遇到被反爬虫,比如字体反爬、IP识别、验证码等,如何层层攻克难点拿到想要数据,这门课程,你都能学到!</span> </p> <p> <span style="font-size:14px;">       2、如果是作为一个其他行业开发者,比如app开发,web开发,学习爬虫能让你加强对技术认知,能够开发出更加安全软件和网站</span> </p> <p> <br /> </p> <span style="font-size:14px;color:#337FE5;">【课程设计】</span> <p class="ql-long-10663260"> <span> </span> </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> 一个完整爬虫程序,无论大小,总体来说可以分成三个步骤,分别是 </p> <ol> <li class="" style="font-size:11pt;color:#494949;"> 网络请求模拟浏览器行为从网上抓取数据。 </li> <li class="" style="font-size:11pt;color:#494949;"> 数据解析将请求下来数据进行过滤,提取我们想要数据。 </li> <li class="" style="font-size:11pt;color:#494949;"> 数据存储将提取到数据存储到硬盘或者内存中。比如用mysql数据库或者redis等。 </li> </ol> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> 那么本课程也是按照这几个步骤循序渐进进行讲解,带领学生完整掌握每个步骤技术。另外,因为爬虫多样性,在爬取过程中可能会发生被反爬、效率低下等。因此我们又增加了两个章节用来提高爬虫程序灵活性,分别是 </p> <ol> <li class="" style="font-size:11pt;color:#494949;"> 爬虫进阶包括IP代理,多线程爬虫,图形验证码识别、JS加密解密、动态网页爬虫、字体反爬识别等。 </li> <li class="" style="font-size:11pt;color:#494949;"> Scrapy和分布式爬虫Scrapy框架、Scrapy-redis组件、分布式爬虫等。 </li> </ol> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> 通过爬虫进阶知识点我们能应付大量反爬网站,而Scrapy框架作为一个专业爬虫框架,使用他可以快速提高我们编写爬虫程序效率和速度。另外如果一台机器不能满足你需求,我们可以用分布式爬虫让多台机器帮助你快速爬取数据。 </p> <p style="font-size:11pt;color:#494949;">   </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> 从基础爬虫到商业化应用爬虫,本套课程满足您所有需求! </p> <p class="ql-long-26664262" style="font-size:11pt;color:#494949;"> <br /> </p> <p> <br /> </p> <p> <span style="font-size:14px;background-color:#FFFFFF;color:#337FE5;">【课程服务】</span> </p> <p> <span style="font-size:14px;">专属付费社群+定期答疑</span> </p> <p> <br /> </p> <p class="ql-long-24357476"> <span style="font-size:16px;"><br /> </span> </p> <p> <br /> </p> <p class="ql-long-24357476"> <span style="font-size:16px;"></span> </p>
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值