“省事的活多半效率不高”,对编程来说,很多时候适用。NHibernate省却我们写Sql语句、存储过程,且数据库的移植又是相当方便,效率估计有一些影响。

那影响有多大呢?

为此我利用一个现有的WebService,试图去比较使用NHibernate和直接使用SqlClient之间的性能差异。

NHibernate性能的思考private ISessionFactory _sessions;
NHibernate性能的思考
public void Configure()

每一次的都从头到尾执行一次
NHibernate性能的思考this.Configure();
NHibernate性能的思考ISession session 
= _sessions.OpenSession();
NHibernate性能的思考ITransaction transaction 
= session.BeginTransaction();
NHibernate性能的思考
NHibernate性能的思考session.Save(product1);
NHibernate性能的思考transaction.Commit();
NHibernate性能的思考session.Close();
NHibernate性能的思考

SqlClient也一样从头到尾
NHibernate性能的思考SqlConnection connect = new SqlConnection("Server=localhost;initialNHibernate性能的思考"); 
NHibernate性能的思考
try

执行100次的以上操作,NHibernate用了近6秒,直接使用SqlClient却用了不到2秒。NHibernate真的如此不济?

稍作思考,将NHibernate的过程分解了一下。首先使用一个类包装一下Configure
也将ISession简单的封装到ConnectSession中
    }

测试过程只执行以下几步
NHibernate性能的思考DbConfigure con = DbConfigure.CurrentConnect;
NHibernate性能的思考ConnectSession connect 
= con.OpenSession();
NHibernate性能的思考
NHibernate性能的思考ProductLocator prdLoc 
= new ProductLocator(connect.DbSession);
NHibernate性能的思考Product prd 
= new Product();
NHibernate性能的思考
//NHibernate性能的思考一些赋值操作
NHibernate性能的思考
connect.BeginTransaction();
NHibernate性能的思考prdLoc.Update(prd);
NHibernate性能的思考connect.CommitTransaction();
NHibernate性能的思考connect.Close();
NHibernate性能的思考

NHibernate的成绩一下子提高到只需1.3秒多些,只稍慢于SqlClient的1.2秒,同样是操作100次。代码上的差异主要是用Application保存DbConfigure,Web应用程序只主要在启动的时候执行DbConfigure的Configure方法
NHibernate性能的思考public static DbConfigure CurrentConnect

当然对于windows应用程序就可以省下这个心了。看来NHibernate的是相当值得使用!

相关文章:

  • 2021-11-01
  • 2022-12-23
  • 2021-06-26
  • 2021-09-18
  • 2021-08-04
  • 2021-10-15
猜你喜欢
  • 2021-11-16
  • 2021-05-16
  • 2021-09-12
  • 2022-12-23
  • 2022-12-23
  • 2021-05-06
  • 2021-12-22
相关资源
相似解决方案