jillzhang
专注才能专业
随笔- 241 文章- 0 评论- 4353
博客园
首页
新随笔
联系
管理
订阅
Nhibernate学习之性能改善1
1.学习目标
通过几天来大家对Nhiberate的反映,很多人对它的性能非常的担心,本文便着手从最直观的角度和方法中逐步改善nhiberate的性能。改善性能是需要做出很多分析和测试的,本文试图从最表层的对象入手,以后逐渐增加其他方面的性能分析。希望各位看官莫要着急。
2. 分析:
ISession和ISessionFactory对象的产生,使用,和销毁对性能的影响。
ISessionFactory对象是线程安全的,它可以被程序的任意线程所适用,但是创建它的性能开销是比较大的。所以不要频繁创建ISessionFactroy对象
ISession对象是非线程安全的,创建它的开销比较小
创建一个ISessionFactory对象的主要流程有:
这期间,包括对多个xml文件的解析和格式验证,验证的过程还包括对对象的反射。这些对性能损失非常大。用dottrace跟踪程序执行,如下
在web应用程序里面,将ISessionFactory对象放到预缓存里面,可以避免频繁创建ISessionFactory对象。如
using
System;
using
System.Data;
using
System.Configuration;
using
System.Web;
using
System.Web.Security;
using
System.Web.UI;
using
System.Web.UI.WebControls;
using
System.Web.UI.WebControls.WebParts;
using
System.Web.UI.HtmlControls;
using
NHibernate;
using
NHibernate.Cfg;
namespace
WebApp
{
public
sealed
class
NHibernateHelper
{
private
const
string
CurrentSessionKey
=
"
nhibernate.current_session
"
;
private
static
readonly
ISessionFactory sessionFactory;
static
NHibernateHelper()
{
string
cfgPath
=
@"
E:\my project\nhibernate study\simle 1\NHibernateStudy1\NhibernateSample1\hibernate.cfg.xml
"
;
sessionFactory
=
new
NHibernate.Cfg.Configuration().Configure(cfgPath).BuildSessionFactory();
}
public
static
ISession GetCurrentSession()
{
HttpContext context
=
HttpContext.Current;
ISession currentSession
=
context.Items[CurrentSessionKey]
as
ISession;
if
(currentSession
==
null
)
{
currentSession
=
sessionFactory.OpenSession();
context.Items[CurrentSessionKey]
=
currentSession;
}
return
currentSession;
}
public
static
void
CloseSession()
{
HttpContext context
=
HttpContext.Current;
ISession currentSession
=
context.Items[CurrentSessionKey]
as
ISession;
if
(currentSession
==
null
)
{
//
No current session
return
;
}
currentSession.Close();
context.Items.Remove(CurrentSessionKey);
}
public
static
void
CloseSessionFactory()
{
if
(sessionFactory
!=
null
)
{
sessionFactory.Close();
}
}
}
}
用dottrace跟踪结果为:
从执行时间来看
System.Diagnostics.Stopwatch sw
=
new
System.Diagnostics.Stopwatch();
sw.Start();
ISession session
=
NHibernateHelper.GetCurrentSession();
session.Close();
sw.Stop();
Response.Write(sw.ElapsedTicks
+
"
<br>
"
);
sw.Reset();
sw.Start();
session
=
NHibernateHelper.GetCurrentSession();
session.Close();
sw.Stop();
Response.Write(sw.ElapsedTicks
+
"
<br>
"
);
sw.Reset();
sw.Start();
session
=
NHibernateHelper.GetCurrentSession();
session.Close();
sw.Stop();
Response.Write(sw.ElapsedTicks
+
"
<br>
"
);
执行结果为:
作者:
jillzhang
出处:
http://jillzhang.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
posted @ 2007-04-01 17:11
jillzhang
阅读(3505)
评论(6)
编辑
收藏
网摘
所属分类:
ORM
发表评论
回复
引用
2007-04-01 18:06 |
ofei [未注册用户]
不错不错 期待下更多篇
没dottrace的注册码 55555
回复
引用
查看
2007-04-01 19:35 |
^-^Roping.Zong
ISessionFactory这个最好在web程序对于每一个页面结束请求后都关闭Session!
using System;
using System.Web;
namespace NHibernateHelper
{
/// <summary>
/// NHHttpModule 的摘要说明。
/// </summary>
public class NHHttpModule : IHttpModule
{
public void Dispose(){}
public void Init(HttpApplication context)
{
context.EndRequest += new EventHandler(EndRequest);
}
public void EndRequest(Object sender, EventArgs e)
{
DB.CloseSession();
}
}
}
回复
引用
查看
2007-04-01 21:19 |
jillzhang
@ofei
http://www.cnblogs.com/Files/submaie/dotTraceKeyGen.rar
回复
引用
查看
2007-04-01 21:32 |
Zhongkeruanjian
呵呵,有道理,我现在在研究NH的2级缓存,如果2级缓存用不上,NH的性能还是没办法上去。由于诸多原因,我现在希望要实体在更新时将此实体的第二级缓存失效的策略,但是NH好像没有这样的配置,默认是更新缓存。。。现在只是找到了Persister的一个 IsCacheInvalidationRequired属性,让它默认为True,这样是更新缓存时失效,但是还没有太多的测试,不知有没有问题。
新用户注册
刷新评论列表
标题
姓名
主页
Email
(博主才能看到)
验证码
*
看不清,换一张
[
登录
][
注册
]
内容(请不要发表任何与政治相关的内容)
网站首页
新闻频道
社区
小组
博问
网摘
闪存
找找看
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
"五向定位"职业成长路线公开课(上海、南京、大连)
Google站内搜索
相关文章:
走进Linq-Linq to SQL感性认识篇
扩展LINQ to SQL:使用Lambda Expression批量删除数据
NHibernate学习
安能辨龟是雄雌---巴西龟的雌雄辨别方法
。net下主流的ORM主要哪些?
Office Account 2008 中的ORM框架问题
谈谈LINQ to SQL
存储过程与SQL语句的恩怨情仇
相关链接:
所属分类的其他文章:
nhibernate学习之集合组合依赖
nhibernate学习之简单组合的映射
nhibernate性能之二级缓存篇
Nhibernate学习之性能改善1
nhibernate学习之三级联(Ternary Associations)篇
Nhibernate学习之many-to-many篇
Nhibernate学习起步之many-to-one篇
Nhibernate分析之华山论剑篇
Nhibernate学习之起步篇-1
最新IT新闻:
最富有科技公司:中移动310亿美元居首
华盛顿抛弃微软Office 选择Google Apps
微软:WGA验证每小时黑屏是善意提醒
研究表明上网可以提高记忆力
为什么叫Windows 7?
我的简介
姓名:
张玉彬
职业:
程序员
住址:
北京
网名:
jillzhang
专长:
分布式应用程序开发
我的MVP配置
版权声明
本站任何言论仅代表个人观点,与作者所在的公司没有任何关系,所有贴子皆以“现状”提供且没有任何担保,同时也没有授予任何权利。
其他站点
Csdn博客
51CTO博客
binyzhang
推荐阅读
WCF从理论到实践
团队
开源项目
开源项目
联系方式
与我联系
发短消息
搜索
留言簿
给我留言
查看留言
我管理的小组
GifLib
WCF技术研究
易书阁
我参加的小组
设计模式
图灵俱乐部
生活杂谈
读书(Books)
框架设计
我参与的团队
.NET 控件与组件开发(0/1386)
敏捷软件开发组织(0/284)
北京.NET俱乐部(1/1558)
Ajax&Atlas技术团队(0/1138)
ASP.NET AJAX (Atlas)学习(0/1351)
O/R Mapping团队(0/209)
MVP(微软最有价值专家)团队(1/662)
CLR基础研究团队(0/415)
开源CLI核心探索团队(0/98)
WCF技术研究团队(0/187)
框架设计团队(0/45)
随笔分类
(229)
.net framework(12)
ajax(14)
asp.net(47)
Design Pattern(4)
Linux(3)
MS SQL(3)
ORM(9)
Project Manage(12)
Resourc&Link(1)
Set&Configuration(2)
WCF(32)
web protocol(1)
web service(18)
WPF(3)
创业(4)
胡思乱想(16)
算法(18)
系统架构(13)
职场点滴(8)
自己开发的小工具(2)
组件开发(7)
随笔档案
(242)
2008年8月 (3)
2008年7月 (6)
2008年6月 (7)
2008年5月 (2)
2008年4月 (11)
2008年3月 (16)
2008年2月 (13)
2008年1月 (24)
2007年12月 (8)
2007年10月 (8)
2007年9月 (11)
2007年6月 (14)
2007年5月 (2)
2007年4月 (7)
2007年3月 (9)
2007年2月 (10)
2007年1月 (3)
2006年12月 (1)
2006年11月 (17)
2006年10月 (9)
2006年9月 (15)
2006年8月 (20)
2006年7月 (4)
2006年6月 (2)
2006年5月 (3)
2006年4月 (10)
2006年3月 (3)
2005年12月 (4)
相册
我的相册
我正在看的书籍
WCF大牛
aaron-skonnard
Buddhike
Carlos
Juval
Mehran Nikoo
pedramr
Sahil Malik
WCF Tools团队
我的好友
Anytao
ltp
Q.yuhen
TerryLee
老赵点滴
龙叔
双鱼座
王景
杨建昆
杨正祎
张伟
张子阳
积分与排名
积分 - 744017
排名 - 24
最新随笔
1. WCF从理论到实践系列文章索引
2. 【封装】WCF+LINQ+ExtJS做更简单的Grid
3. [添砖加瓦]:ExtJS+WCF+LINQ打造全功能Grid
4. WCF生成客户端对象方式解析
5. 再说ExtJs与WCF之间的跨域访问
6. 用Restful方式调用WCF进行上传下载
7. 异步调用Restful的WCF服务
8. Asp.Net开发小技巧汇总
9. ExtJs与WCF之间的跨域访问
10. ExtJs+WCF+LINQ实现分页Grid
11. 用ExtJs+Linq+Wcf打造简单grid
12. 愈敏洪讲座
13. ExtJs与WCF交互:生成树
14. Ajax与Wcf交互-JSON
15. Ajax与WCF交互-WCF之美
16. Ajax访问Xml Web Service的安全问题以及解决方案
17. 在CodePlex上开源GifUtility
18. 图标下载利器
19. WCF从理论到实践(17):OO大背离(带视频+ppt+源码)
20. WCF从理论到实践(16):操作重载(带视频+ppt+源码)
21. WCF技术研究团队QA专题
22. WCF技术研究团队诚邀您的加入
23. WCF从理论到实践(15):响应变化
24. WCF从理论到实践(14):WCF解决方案模板
25. 一起学WPF系列(3):窗体
最新评论
1. re: 一起学WPF系列(2):第一个WPF应用程序
@ka
我只学了点皮毛,园子中周银辉这方面的专家,有问题可以找他。呵呵,wpf 方面找我也估计帮不上你什么 (jillzhang)
2. re: 发布一个用于Oracle数据库间数据复制的组件-OraSyner
@张冰
能不能将您的改进发给我一下 (jillzhang)
3. re: WCF技术研究团队QA专题
@荆鹏 你知道tcp是一中可靠连接的故事吧? udp不是可靠连接的故事呢? 呵呵 网络基本常识,应该知道的 但tcp这个可靠连接的含义特指网络数据包。 熟悉socket和tcp/ip的朋友应该知道,i... (jillzhang)
4. re: 发布一个用于Oracle数据库间数据复制的组件-OraSyner
我在你组件的基础上做了些改进。请多提些意见。 (张冰)
5. re: 一起学WPF系列(2):第一个WPF应用程序
呵呵,不错。挺入门挺体贴的。
正在学习中,有问题再向楼主请教哈。。 (ka)
6. re: WCF技术研究团队诚邀您的加入
用户名:mimi001
技术特长:c#
博客园网址:
电子邮件:youlingrenzhe@gmail.com (Minja)
7. re: WCF从理论到实践(6):WCF架构
太好了,感谢楼主的辛勤劳动!
建议楼主以后举的例子能像artech的文章中那样,以一个calculator为例,看起来更有实际体验,领悟得也深刻些。 (mylittleflower)
8. re: WCF技术研究团队诚邀您的加入
用户名:wangjiafeng2008 技术特长:asp.net 博客园网址: 电子邮件:wangjf@bitauto.com ... (王加锋)
9. re: LZW数据压缩算法的原理分析
谢谢了,昨晚看了一晚上书明白,今早终于弄懂了 (Leng)
10. re: WCF从理论到实践(7):消息交换模式
--引用-------------------------------------------------- 品味从容: 哦,还有一点,一个解决方案下,怎么同时启动2个Console程序??? ---... (守護~︶箬)
阅读排行榜
1. 在CodePlex上开源GifUtility(11468)
2. LZW数据压缩算法的原理分析(11019)
3. Nhibernate学习之起步篇-1(10114)
4. 试图运行项目时出错:无法在web服务器上启动项目得解决办法(9762)
5. [添砖加瓦]:ExtJS+WCF+LINQ打造全功能Grid(6744)
6. WCF从理论到实践(1):揭开神秘面纱(6665)
7. 痛并努力着-在asp.net中如何从视频文件中抓取一桢并生成图像文件(6395)
8. 手把手教你如何扩展GridView之自带CheckBox(6322)
9. jillzhang的文章索引(6317)
10. Nhibernate学习起步之many-to-one篇(6213)
11. WCF从理论到实践(6):WCF架构(5743)
12. [原创]单点登陆(SSO)组件的设计与实现一(5703)
13. 将彩色照片变成黑白照片(5685)
14. 打造0代码全自动GridView-天具神力(5522)
15. 递归算法学习系列之经典背包问题(5384)
16. Nhibernate学习之many-to-many篇(4943)
17. 对一些面试题的回答(4924)
18. 仍然是gif动画:仿QQ秀生成修正版(4921)
19. activeX还是ajax?(4896)
20. WCF从理论到实践(2):决战紫禁之巅(4593)
21. 一些面试题的回答二(4588)
22. 浮点数在计算机中存储方式(4568)
23. WCF从理论到实践(5):Binding细解(4425)
24. 手把手教你如何扩展GridView之自带Excel和Word导出(4399)
25. 大牛生小牛的问题(4275)
26. WCF从理论到实践(3):八号当铺之黑色契约(4231)
27. 实战演习使Asp.Net Web Service脱离IIS(4091)
28. 手把手教你制作vs2005装饰(4073)
29. 基于弹性碰撞原理的抖动式窗口(4033)
30. nhibernate性能之二级缓存篇(3986)
评论排行榜
1. WCF技术研究团队诚邀您的加入(240)
2. 仍然是gif动画:仿QQ秀生成修正版(153)
3. 打造0代码全自动GridView-天具神力(149)
4. 再次改进gif动画水印和缩略-节日版(120)
5. 再再发Gif动画处理类库 - 315版(111)
6. [添砖加瓦]:ExtJS+WCF+LINQ打造全功能Grid(107)
7. 程序员职场-别作愤青(95)
8. 在CodePlex上开源GifUtility(94)
9. 还是gif动画的处理(79)
10. 对一些面试题的回答(77)
11. 程序员职场-卖技不卖身(61)
12. 程序员职场-坚决不做青蛙(60)
13. WCF技术研究团队QA专题(60)
14. 拿什么留住你,我的程序员(60)
15. 让全中国人蒙羞的搜索爬虫(58)
16. Nhibernate学习之起步篇-1(54)
17. 上周六香山游兄弟们的合影(54)
18. 程序员职场-产品部和研发部的故事(51)
19. 假如程序员成了收垃圾的(50)
20. 生命与工作(46)
21. 程序员职场-如何面对混蛋领导(46)
22. 程序员职场-走自己的路,让别人也有路可走(45)
23. 大牛生小牛的问题(45)
24. activeX还是ajax?(44)
25. 邀请同游者(44)
26. 程序员职场-三人行,必有我师(42)
27. 一些面试题的回答二(41)
28. 反射(Reflection)的性能分析(41)
29. 再发Gif动画水印(40)
30. 两种实现事务方法的比较(40)