All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
比较测试PHP+MYSQL分页机制两种方案_[PHP教程]
PHP6将实现的几个特性和功能_[PHP教程]
PHP一些常用的正则表达式_[PHP教程]
实现ASP.NET生成随机密码功能_[Asp.Net教程]
打开delphi对话框组件(TOpenDialog)实例
ASP.NET如何保留两位小数点_.net资料_编程技术
ASP.NET,2.0的Web,Part,Framework_.net资料_编程技术
在C#中运用SQLDMO备份和恢复Microsoft,SQL,Server数据库_[Asp.Net教程]
如何无需编程便将数据SQL导出到MYSQL_[SQL,Server教程]
详细学习动态网页制作PHP技术的正则表达式_php资料_编程技术
Reading number is top 10 pictures
避免防盗门的猫眼变成钥匙眼
赵惟依写真3
Absolutely shocked. National geographic 50 animal photographys4
yy365网站上的美女1
男人们都在想什么
Group of female porn in 《westwards》, uninhibited woman threatened to not the bottom line
So beauty, will let you spray blood10
Born After 90 Beijing sports university campus flower photos2
The cat shit
Breasts woman big set 1
Download software ranking
Boxer's Top ten classic battle9
Twenty piece of palm leaf
Popkart Cracked versions Mobile phone games
Eclipse-CALMSANNY (second edition)
C++编程教程第三版
WebService在.NET中的实战应用教学视频 → 第1集
Rio big adventure
Unix video tutorial9
Tram sex maniac 2 (H) rar bag19
C#高级编程(第4版)
delv published in(发表于) 2014/1/6 9:02:19 Edit(编辑)
Asp.Net中NHiernate的Session的管理_[Asp.Net教程]

Asp.Net中NHiernate的Session的管理_[Asp.Net教程]

Asp.Net中NHiernate的Session的管理_[Asp.Net教程]

NHibernate中的Session,在我的理解似乎就相当于数据库中连接。因为它也有Open/Close的方法,我没有研究NHibernate的源码,不知道这种理解是否有误?我在网上搜了很多的关于Session的管理,大多都是在我需要数据库操作的时候,就OpenSession(),操作完后就CloseSession().这有点拟似如我们刚开始学习ADO.NET的时候,要Connection对象Open(),数据处理完后就Close().但是这里就带来了一个弊端,因为Connection的频繁的开关是非常消耗系统资源的。我记得以前在制作一个数据的录入界面的时,因为这个录入的界面数据元素比较多,而且很多DropDownList需要在数据库中读取数据并绑定。

  这样在该页面的Page_Load中需要调用相应对象的方法一一从数据库中检索数据绑定DropDownList.因为我们这些对象的方法都是使用独立的Connection,都有自己的Connection的Open和Close。所以,导致这个页面一打开就需要等待好长的时间,比较慢。后来我们将这些需要绑定DropDownList的数据通过一个数据处理成一个DataSet,并将DataSet中的DataTable与DropDownList绑定。这样只需要一次的Connection的Open/Close.页面快了好多。


  所以,我觉得上述的Session的管理办法不是很妥当。


  后来,我看了Cuyahoga开源项目中他的Session管理,他使用的“session-per-request”这种模式。从字面上理解就是他为每个Request创建一个Session,直到这个请求销毁,那么这个Session也就Close了。而Cuyahoga他的做法和session-per-request有点不同地方就是,他为每个Request都创建了一个CoreRepository对象,CoreRepository是系统所需要的数据处理服务的类。他的做法是先创建了HttpModule(NHSessionModule)用来创建CoreRepository对象和销毁CoreRepository对象,如下:


private void Context_BeginRequest(object sender, EventArgs e)
{
// Create the repository for Core objects and add it to the current HttpContext.
CoreRepository cr = new CoreRepository(true);
HttpContext.Current.Items.Add("CoreRepository", cr);
}
private void Context_EndRequest(object sender, EventArgs e)
{
// Close the NHibernate session.
if (HttpContext.Current.Items["CoreRepository"] != null)
{
CoreRepository cr = (CoreRepository)HttpContext.Current.Items["CoreRepository"];
cr.CloseSession();
}
}


  这样在每次请求的时候,会自动创建CoreRepository对象,当请求完毕后,就CloseSession(),在程序中通过HttpContext.Current.Items["CoreRepository"]就能获取CoreRepository对象了。


  这样也就变相的管理了NHibernate中的Session,也就达到了“session-per-request”的这种模式。


  详细的讲解: 通过实现IHttpModule初始化Nhibernate的Session


  这种方式比上面的那个每次操作都需要创建Session,性能和速度应该提高了不少,接着我就想,每个请求都创建Session,是不是我们可以象创建Connection Pool一样,也创建一个Session Pool,这样就每次请求的时候不是直接创建Session,而是在我们的Session Pool中拿已经创建好的Session,这样效率不是更好?!


来源:网络







添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.