西西河

主题:【倡议】Java SE 5.0和.NET 2.0擂台赛 -- Highway

共:💬34
全看分页树展 · 主题 跟帖
家园 Java SE 5.0和.NET 2.0 性能初试 (草案)

性能是一个语言的关键,所以我想做的第一件事就是比较一下Java SE 5.0和.NET 2.0 性能。

不过这并不是一个简单的问题。Benchmark program并不好写。因为这两种语言覆盖面极大,一个Benchmark program很难面面俱到。另外就是即使专注一点,也有很多细节要考虑。比如说I/O吧,你就可能要考虑读的性能,写的性能,大数据量连续读写的性能,小数据量高频率读写的性能,顺序Access问题,Random access问题,Text问题,Binary问题,诸如此类。

今天我从网上下载了一个别人以前写的Benchmark program。这个Benchmark program不是非常具有代表性,比如最重要的XML,Socket,Thread,database, serialization/deserialization等等都没有涉及,I/O和String的比较也太过简单了,有几处比较也不是所谓的Apple vs Apple(比如用Java的Vector比较C#的Arraylist).不过不管怎么说,这总是一个开头吧。

大家可以在这里得到程序源代码

外链出处

有一点要说明一下,I/O部分有些问题,Java和.net得到的文件不一样大。我修改了两行,大致如:

            String textLine = "abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefgh\r\n";
...
                while (i++ < ioMax)
                {
                    streamWriter.Write(textLine);
                }
                streamWriter.Close();

另外Java在测试中会出现Out of memory Exception.我只好给Java来了几个参数,以保证程序可以完成。具体是:java -Xmx500M Benchmark

这里是我的测试结果,在大多数情况下,.NET有优势,在个别测试上Java领先。由于Java和.NET的Exception设计不一样,所以这一项目差别特别大。另外Java的三角运算比.NET慢10倍左右,肯定也有些问题。我还没有仔细看。

[提示:原图站已失效]

另外,Generics的问题我将今后专门讨论!

全看分页树展 · 主题 跟帖


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河