转载:.NET、Mono与Java、C++性能测试大PK

楼主
转载:.NET、Mono与Java、C++性能测试大PK
原文见:
http://tech.it168.com/a2010/0714/1077/000001077387_all.shtml

结论:

[P] [b] 测试结果[/b][/P][P]  这些测试产生的结果很多,我只挑选了与本文主题相关的一些数据,并将热启动的测试结果也一并展示出来了,如图1所示。如果你以调试模式执行测试,产生的结果会更多,对于热启动,我执行了9次测试,而冷启动只有一次,我只采用了中间值(即去掉了最高分和最低分),处理器内核和用户时间被归结到一块儿,总称为[URL=http://product.it168.com/list/b/0217_1.shtml]CPU[/URL]时间,下表的结果是来自一台奔四3.0GHz,2GB[URL=http://product.it168.com/list/b/0205_1.shtml]内存[/URL]的Windows XP机器的测试结果。[/P][P][/P][P][ALIGN=center] [IMG=1,absmiddle]http://image20.it168.com/201007_0x0/120/65bf80d3ae7deac2.jpg[/IMG][/ALIGN][/P][P][/P][P]  注意其中.NET 2.0和.NET 4.0的热启动时间比热启动[URL=http://product.it168.com/list/b/0217_1.shtml]CPU[/URL]时间要低,你可能认为这违背了基本的物理定律,但需要注意这里的[URL=http://product.it168.com/list/b/0217_1.shtml]CPU[/URL]时间指的是进程的整个生命周期,而启动时间仅仅指进入到main函数时的时间,通过这我们知道可以通过一些优化提高这些框架的启动速度,正如你前面看到的,C++由于没有框架,因此优势很明显,调用者进程通过预加载一些通用dll使启动更快。[/P][P]  我没有所有运行时的历史数据,但从.NET各版本的表现来看,越新的版本会通过消耗更多的[URL=http://product.it168.com/list/b/0205_1.shtml]内存[/URL]来提速。[/P][P]  [b]为托管运行时使用原生镜像[/b][/P][P]  除了C++原生代码外,所有运行时都使用了中间代码,下一步如果可能应该尝试生成原生镜像,并再次评估它们的性能,Java没有一个易于使用的工具来完成这项任务,GCJ只能完成一半的任务,而且它还不是官方运行时的一部分,因此我会忽略它。Mono有一个类似的功能叫做Ahead of Time(AOT),遗憾的是,AOT尚不能在Windows上工作。.NET从一开始就支持原生代码生成,ngen.exe就是运行时的一部分。[/P][P]  为了方便你,我在本文提供的压缩包中提供了一个make_nativeimages.bat批处理文件,用它快速生成测试用程序集的原生镜像。下表展示了.NET框架各版本原生镜像的测试结果。[/P][P][/P][P][ALIGN=center] [IMG=1,absmiddle]http://image20.it168.com/201007_0x0/120/69c7d3a34df53d94.jpg[/IMG][/ALIGN][/P][P][/P][P]  我们似乎又再次遇到违背物理定律的事情了,上表显示原生编译的程序集冷启动时间更高,不必大惊小怪,因为加载原生镜像也需要大量的I/O操作,从测试结果来看,它比加载框架所用的时间更多。[/P][P]  [b]运行测试[/b][/P][P]  你可以将测试的可执行文件作为一个参数传递给BenchMarkStartup.exe运行一个特殊的测试,对于Java,包名必须匹配目录结构,因此JavaPerf.StartupTest需要一个..\JavaPerf文件夹。[/P][P]  我在本文提供的压缩包中提供了一个runall.bat批处理文件,但它无法捕捉现实的冷启动时间。[/P][P]  如果你想执行真实的测试,你可以手动重启,或在夜间每隔20-30分钟调度执行release文件夹的benchmark.bat批处理文件,然后从文本日志文件获得结果。重启机器后,它将会运行所有运行时的真实测试。[/P][P]  最新的计算机通常会控制[URL=http://product.it168.com/list/b/0217_1.shtml]CPU[/URL]频率以节约能源,但这可能会影响到测试结果,因此在运行测试之前,除了前面我已经提到的事情外,你还必须将[URL=http://product.it168.com/list/b/0222_1.shtml]电源[/URL]使用方案设置为“高性能”,以便获得一致的结果。[/P][P]  [b]小结[/b][/P][P]  如果你有条件下载文后提供的压缩包按照本文介绍的内容亲自做一下对比测试,相信你对托管运行时和原生代码有更深刻的认识,如果你正在犹豫不决地选择开发平台,本文也可以帮助你确定清晰的方向,另外,你还可以参照本文创建其它运行时或UI测试。[/P][P]  本文使用到的测试源代码和批处理文件从这里下载,我还对Java和Mono专门制作了一个压缩包,从这里下载。[/P]

电脑版 Page created in 0.0938 seconds with 4 queries.