`
softstone
  • 浏览: 480943 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

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

阅读更多

评测报告:.NET的性能仍然远远落后于Java<!----><o:p></o:p>

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

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

Ø         在某一组特定的benchmark中,某一个比另一个快一点;<o:p></o:p>

Ø         MicrosoftSun(或者OracleIBM……)的报告说其中一个比另一个好得多;<o:p></o:p>

Ø         你喜欢(或不喜欢)Bill Gates或者Scott McNeally(或者Larry Ellison);<o:p></o:p>

Ø         你认为Microsoft或者Sun(或者IBM或者Oracle)很邪恶(或者很伟大);<o:p></o:p>

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

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

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

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

C#<o:p></o:p>

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

using System;

using System.Collections;

 <o:p></o:p>

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));

  }

 <o:p></o:p>

  private long Average()

  {

    ArrayList list = new ArrayList(100000);

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

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

 <o:p></o:p>

    long silly = 0;

    foreach (Person p in list)

      silly += p.Id;

    return silly / 100000;

  }

}

 <o:p></o:p>

// Person.cs: a very simple guy

public class Person

{

  int id;

  string name;

 <o:p></o:p>

  public Person(int anId, string aName)

  {

    this.id = anId;

    this.name = aName;

  }

 <o:p></o:p>

  public int Id

  {

    get { return this.id; }

  }

}

Java:<o:p></o:p>

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

import java.util.*;

 <o:p></o:p>

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));

  }

 <o:p></o:p>

  private long average()

  {

    ArrayList list = new ArrayList(100000);

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

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

 <o:p></o:p>

    long silly = 0;

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

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

    return silly;

  }

}

 <o:p></o:p>

// Person.java: a very simple guy

class Person

{

  private int id;

  private String name;

 <o:p></o:p>

  public Person(int anId, String aName)

  {

    this.id = anId;

    this.name = aName;

  }

 <o:p></o:p>

  public int getId()

  {

    return this.id;

  }

}

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

.NET 1.0sp2:<o:p></o:p>

ManyPeople<o:p></o:p>
Total time for iteration 0: 00:00:07.3004976<o:p></o:p>
Total time for iteration 1: 00:00:07.0501376<o:p></o:p>
Total time for iteration 2: 00:00:07.2504256<o:p></o:p>
Total time for iteration 3: 00:00:07.7311168<o:p></o:p>
Total time for iteration 4: 00:00:07.5007856<o:p></o:p>
Total time for iteration 5: 00:00:07.5007856<o:p></o:p>

.NET 1.1:<o:p></o:p>

ManyPeople<o:p></o:p>
Total time for iteration 0: 00:00:08.0916352<o:p></o:p>
Total time for iteration 1: 00:00:08.5222544<o:p></o:p>
Total time for iteration 2: 00:00:08.3520096<o:p></o:p>
Total time for iteration 3: 00:00:08.6324128<o:p></o:p>
Total time for iteration 4: 00:00:08.3419952<o:p></o:p>
Total time for iteration 5: 00:00:08.1617360<o:p></o:p>

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

Sun Hotspot Server JVM from JDK 1.4.1_02:<o:p></o:p>

java -server -Xms128m -Xmx128m ManyPeople<o:p></o:p>
Total time for iteration 0: 6370<o:p></o:p>
Total time for iteration 1: 5788<o:p></o:p>
Total time for iteration 2: 5868<o:p></o:p>
Total time for iteration 3: 6029<o:p></o:p>
Total time for iteration 4: 5748<o:p></o:p>
Total time for iteration 5: 5738<o:p></o:p>
Total time for iteration 6: 5729<o:p></o:p>
Total time for iteration 7: 5948<o:p></o:p>
Total time for iteration 8: 5688<o:p></o:p>
Total time for iteration 9: 5679<o:p></o:p>
Total time for iteration 10: 5658<o:p></o:p>
Total time for iteration 11: 6028<o:p></o:p>
Total time for iteration 12: 5699<o:p></o:p>
Total time for iteration 13: 5708<o:p></o:p>
Total time for iteration 14: 5678<o:p></o:p>
Total time for iteration 15: 5969<o:p></o:p>
Total time for iteration 16: 5628<o:p></o:p>
Total time for iteration 17: 5538<o:p></o:p>
Total time for iteration 18: 5608<o:p></o:p>
Total time for iteration 19: 5498<o:p></o:p>
Total time for iteration 20: 5768<o:p></o:p>
Total time for iteration 21: 5518<o:p></o:p>
Total time for iteration 22: 5307<o:p></o:p>
Total time for iteration 23: 4247<o:p></o:p>
Total time for iteration 24: 4696<o:p></o:p>
Total time for iteration 25: 4617<o:p></o:p>
Total time for iteration 26: 4777<o:p></o:p>
Total time for iteration 27: 4286<o:p></o:p>
Total time for iteration 28: 4677<o:p></o:p>
Total time for iteration 29: 4626<o:p></o:p>
Total time for iteration 30: 4697<o:p></o:p>
Total time for iteration 31: 4286<o:p></o:p>
Total time for iteration 32: 4697<o:p></o:p>
Total time for iteration 33: 4617<o:p></o:p>
Total time for iteration 34: 4696<o:p></o:p>
Total time for iteration 35: 4307<o:p></o:p>
Total time for iteration 36: 4686<o:p></o:p>
Total time for iteration 37: 4807<o:p></o:p>
Total time for iteration 38: 4517<o:p></o:p>
Total time for iteration 39: 4306<o:p></o:p>
Total time for iteration 40: 4657<o:p></o:p>
Total time for iteration 41: 4807<o:p></o:p>
Total time for iteration 42: 4596<o:p></o:p>
Total time for iteration 43: 4206<o:p></o:p>
Total time for iteration 44: 4777<o:p></o:p>
Total time for iteration 45: 4717<o:p></o:p>
Total time for iteration 46: 4607<o:p></o:p>
Total time for iteration 47: 4196<o:p></o:p>
Total time for iteration 48: 4796<o:p></o:p>
Total time for iteration 49: 4707<o:p></o:p>
Total time for iteration 50: 4777<o:p></o:p>
Total time for iteration 51: 4196<o:p></o:p>
Total time for iteration 52: 4627<o:p></o:p>
Total time for iteration 53: 4687<o:p></o:p>
Total time for iteration 54: 4806<o:p></o:p>
Total time for iteration 55: 4186<o:p></o:p>
Total time for iteration 56: 4627<o:p></o:p>
Total time for iteration 57: 4697<o:p></o:p>
分享到:
评论

相关推荐

    .Net性能优化的几点建议

    ### .Net性能优化的几点建议 #### 一、先评测,再优化 性能优化的核心原则之一就是“先评测,再优化”。这意味着在进行任何优化工作之前,首先要对系统的当前性能进行评估,找到真正的瓶颈所在。这一步骤至关重要...

    ASP.NET在线测评系统

    7. 安全性与性能:ASP.NET提供了多种安全机制,如身份验证、授权和加密,确保在线测评系统的安全性。同时,通过优化数据库查询和缓存策略,系统能够应对高并发访问,保证在大规模考试中的稳定运行。 8. 扩展性与...

    测评报告:2021年中国植物肉测评报告(34页).pdf

    【标题】:“测评报告:2021年中国植物肉测评报告(34页).pdf” 【描述】:这份报告详细分析了2021年中国植物肉市场的发展状况,包括产品的品质、口感、营养价值以及消费者接受度等多个方面,旨在为行业内外的相关...

    阿里巴巴Java性能调优实战(2021-2022华山版)+Java架构核心宝典+性能优化手册100技巧.rar

    性能优化手册是一套java性能学习研究小技巧,包含内容:Java性能优化、JVM性能优化、服务器性能优化、数据库性能优化、前端性能优化等。 内容包括但不限于: String 性能优化的 3 个小技巧 HashMap 7 种遍历方式...

    Java性能优化手册100技巧 中文PDF最新版

    性能优化手册是一套java性能学习研究小技巧,包含内容:Java性能优化、JVM性能优化、服务器性能优化、数据库性能优化、前端性能优化等。 内容包括但不限于: String 性能优化的 3 个小技巧 HashMap 7 种遍历方式...

    网上考试系统 asp.net+sql

    该系统提供了完整的功能,能够直接投入使用,适用于教育机构、企事业单位进行线上考核和评测。 在ASP.NET技术方面,它是微软推出的一种Web应用程序框架,主要用于构建动态网站、Web应用程序和Web服务。ASP.NET的...

    ASPC#.net教师在线测评系统

    《ASP.NET C# 教师在线测评系统的构建与解析》 在信息技术日益发达的今天,教育领域的数字化转型已经成为必然趋势。本文将详细探讨一个基于ASP.NET C#技术开发的教师在线测评系统,该系统旨在为学生、教师和管理员...

    .net评测试卷

    根据给定的文件信息,我们可以总结出以下关于 .NET 技术栈的相关知识点: ### 一、名词解释 1. **CLR (Common Language Runtime)** - **中文全写**:公共语言运行时 - **作用**:CLR 是 .NET Framework 的核心...

    威盛电子 第三方评测报告:威盛Nano X2处理器与英特尔Atom处理器之比较(中英文).rar

    标题中的“威盛电子 第三方评测报告:威盛Nano X2处理器与英特尔Atom处理器之比较(中英文).rar”表明这是一个关于威盛Nano X2处理器与英特尔Atom处理器性能对比的第三方评测报告,包含了中文和英文两个版本。...

    ASP.NET投票系统开发讲解说明.pdf

    - **定义:** WEB用户控件是一种可重用的ASP.NET控件,类似于HTML文件,但可以包含服务器端代码。 - **用途:** 在本项目中,WEB用户控件被用于构建投票模块,可以实现代码的复用,提高开发效率。 - **示例:** 通过...

    【SuperCLUE团队】中文大模型基准测评2023年度报告

    ### 2023年度中文大模型基准测评关键知识点 #### 一、国内大模型发展的三个阶段 1. **准备期**: - **时间节点**:2022年11月30日ChatGPT发布后。 - **特点**:国内学术界和产业界迅速形成了对于大模型开发的...

    asp.net 体质测评

    【ASP.NET体质测评系统详解】 ASP.NET体质测评系统是一个基于微软的ASP.NET技术构建的评分系统,它允许管理员自定义题目和答案,为用户提供个性化的体质评估服务。这个系统不仅功能完整,而且用户体验良好,是学习...

    综合成绩测评系统.net源码

    《综合成绩测评系统.net源码解析》 在IT行业中,教育信息化是不可或缺的一部分,而成绩管理系统作为其中的核心组件,承担着记录、分析和展示学生学习成果的重要职责。本篇文章将详细解析一个基于.NET框架,使用C#...

    基于Asp.net的在线测试系统

    【基于Asp.net的在线测试系统】是一种使用微软的ASP.NET技术开发的Web应用程序,它为用户提供了一种方便、高效的方式来进行在线测试和评估。这个系统通常包括用户管理、试题库管理、考试创建、考试参与、成绩反馈等...

    基于asp.net的大学生素质测评系统(源码+数据库+文档).zip

    作为大学生综合素质测评信息管理系统,在系统中一定存在许多的学生,这需要对学生的信息进行管理; 每学期期末时都需要对这些学生的各方面素质进行综合测评,系统能根据各个素质的分数自动计算综合的 素质分数,...

    编写高性能的.net代码1

    编写高性能的.NET代码是每一个.NET程序员都必须面对的课题。在程序运行的世界里,性能往往决定着用户体验,甚至成败。要实现这一点,程序员需要深入了解.NET框架,尤其是CLR的工作机制,并在此基础上优化代码执行。...

Global site tag (gtag.js) - Google Analytics