公司下一个项目要在EF和NH之间做一个抉择。网上关于二者优劣的文章一搜一大把。本文仅提供ORMBattle测试套件下二者最新版本的比较。
首先给出我修改过的测试套件,包含结果。
修改点如下
- 删掉了DataObject.Net相关的测试,因为我没有license
- 升级NH到最新的NH3,测试用的Context类不继承任何基类直接使用Session.Query(而基于NH2.1.2的测试套件里继承了NHibernate.Linq 2.1.2的NHibernateContext)
- 把根目录下的Output.txt替换为了我的测试结果,只包含了EF和NH
- _Documents\ORMBattle.NET Test Results.xlsm替换为了我的测试结果,只包含了EF和NH
关于测试有如下几点说明
- 目前EF4.1RC已经发布。但由于测试套件中提供的EFModel没有使用Code First模式,所以用不到4.1的新能力,我也就没有引用4.1的EntityFramework.dll
- NH3的lazy load的provider我选择了Castle,虽然不知这个测试套件会不会用到= =
- 性能测试我也参照官网取了1000 items那组数据,全部数据可以参考Output.txt
- 测试环境是
- Workstation DELL OPTIPLEX 780
- OS Windows 7 Enterprise (32 bit)
- Processor Intel Core 2 Q8400
- Memory 2G
- DB SQL Server 2008 Sp1
数据不贴了,直接上图,全都是more is better
对比官网上NH2.1.2的数据,发现NH3在Linq支持上还是有长足进步的。当然比EF还差很远就是。
后面的性能测试,基本上要算比EF差(虽然有些项目占优)。
最后,本文的结果仅作参考。网上喷这个测试套件的很多,所以本文也请随意喷。
http://www.cnblogs.com/jiaxingseng/archive/2011/03/18/1988254.html