NHibernate在非常简单的查询中的性能问题

时间:2014-04-04 13:39:30

标签: mysql performance nhibernate ado.net

我们正处于我们网站的再造任务中。我们从通过ADO.Net使用纯SQL查询进行数据访问的情况开始,我们希望在场景后面获得一个ORM。我们知道我们会有性能损失,但我们所经历的实际上是太多了。 我提出了一个非常简单的演示项目,其中我只是尝试以基本的3种方式加载表的前10行:通过Ado.Net,通过NHibernate会话直接查询和通过LinqtoNHibernate。 我获得的结果让我感到惊讶:使用直接Ado.Net方法需要10毫秒,通过NHibernate使用SQL查询需要80毫秒(ADO.Net方法花费的时间的8倍),但更糟糕的是,使用Linq需要320毫秒(超过ADO.Net方法所用时间的30倍。 我的意思是,这是一个简单的查询... NHibernate制作的SQL与Ado.Net方法中使用的SQL相同,但我仍然有这样的性能损失。 这是正常的吗?为什么NHibernate为这么简单的查询增加了这么多开销? 我的方法是否做错了什么?

You can find the code of my test project and the sql for table creation on gist(我们正在研究MySql数据库)

显然我们进行了其他测试,查询更复杂,映射更复杂,但比例相同或更差。使用真实站点中的2种方法,我们发现同一页面(仅考虑后端数据检索操作)占用Ado.Net方法所用时间的50到100倍,这对我们来说是不可接受的(我们从16ms发出的json开始到ajax调用中600ms发出的json,我们只需更改DAL)。

0 个答案:

没有答案