DateTime startTime = DateTime.Now; int addCount = int.Parse( Request.Form[ "loopCount" ] ); int result = 0;
for( int i = 0; i < addCount; i ++ ) { result = 0; for( int j = 0; j < addCount; j ++ ) result += j; }
TimeSpan timeSpent = DateTime.Now - startTime;
以上代码用一个两重循环来计算整数加法,浮点数的加法测试程序与此类似。C#语言直观清晰,微软的.NET环境功能很强,很多东西可直接调用,比如计算时间差就非常简单,然后测试数据库性能,由于微软.NET中不包含对MySQL的直接支持,从www.mysql.com下载了最新的ADO.Net Driver for MySQL,测试MySQL性能的代码如下:
DateTime startTime = DateTime.Now;
int insertCount = int.Parse( Request.Form[ "sqlNumber" ] ); Random ownerGen = new Random( (int)DateTime.Now.Ticks ); int ownerid = ownerGen.Next( int.MaxValue );
create table FORTEST ( OWNERID INTEGER not null, SERIALNUMBER INTEGER not null, DATA VARCHAR(200) ) alter table FORTEST add primary key (OWNERID, SERIALNUMBER)
插入时ownerid随机产生,以便测试并发性能。由于MySQL可以支持多种数据引擎,所以对两种比较常用的引擎MyISAM和InnoDB都作了测试。 微软.NET包含了SQL Server 2000的ADO.NET驱动和Oracle驱动,但测试Oracle时没有使用微软驱动而使用了Oracle自己的版本为9.2.0.4的ADO.NET驱动,因为微软的驱动略显陈旧。SQL Server和Oracle 测试代码除了conn与cmd两个变量使用的数据类型不同外,其他代码与此完全相同,ADO.NET代码在不同数据库间有很好的可移植性。由于数据类型差异,Oracle、SQL Server 2000与MySQL的建表SQL略有不同。
PHP的速度只在连接MyISAM引擎时表现良好,除此之外几乎一无是处,由于PHP是解释执行而且变量无类型,这造成它的数值计算速度非常慢,响应时间是ASP.NET和JSP的数百倍。 千万不要使用PHP进行复杂的数值计算,如果必须要这么做,最好使用PHP的自定义函数功能,用C实现函数后用PHP调用。 ASP.NET在其绝对速度上表现突出,在连接SQL Server 2000时性能优异。但连接Oracle速度很慢,很让人费解,可能是驱动程序没有优化所致,也可能是两个巨头在某些方面没有达成一致意见。 JSP依靠其设计优秀的JDBC在数据库操作上平均速度最快,访问所有的数据库代码都无需修改,在数值计算能力上和ASP.NET的差别几乎可以忽略不计,从这一点上来看,J2EE在企业中的地位很难动摇,何况在其背后还有这么多业界巨头和自由开发者。
七、最后的优胜者
本文推荐几个黄金组合,按使用成本从低到高如下:
Linux + Apache + PHP + MySQL(MyISAM引擎) 这个组合在性价比上是当之无愧的王者,因为它的所有软件均免费而且拥有最快的数据库响应时间(1.93秒),相当稳定,很少有人听说MySQL死机吧?这个组合入门很容易,这也是为什么那么多初学者选用LAMP来做个人主页的原因了。LAMP的缺点是事务处理能力弱,数值计算能力差,很不适合企业级计算,但对经常读写数据库,又不需要事务处理的应用,比如论坛、办公网、企业门户网站等,它还是很胜任的。LAMP的入门要求是您必须有一名Linux系统管理员。
Windows 2003 + IIS + ASP.NET + SQL Server 2000 这个组合在开发成本上应该是最低的,因为它拥有最为强大的桌面集成环境,而且这套软件微软打包后价格不贵,支持的功能又特别多,特别适合中小型企业构造企业网站、办公网、电子商务平台等。这个组合的最大风险来自Windows的病毒引起的维护成本,因为攻击Windows的病毒实在太多,Windows系统的用户必须相当小心才能使自己的平台不受攻击。如果一个企业的拥有1到2名微软认证的系统管理员,而且所有Windows都是正版,推荐使用这套配置。