使用NHibernate时,如何提高访问Oracle数据库(ODP.net)的性能

这几天,将用NHibernate做的一个项目从Sql Server上移植到了Oracle(使用ODP.net),移植之后,发现在运行单元测试时,速度慢了很多,测试之后,确定与NHibernate和ODP.net有关。

在以前做项目的时候就发现ODP.net建立Connection时的效率比较低,因此采用活动连接的方法。但是在使用NHibernate时,系统在DAO层对NH进行了封装,在WEB层无法操作ISession,因此系统在操作数据时,不同的业务处理之间使用了不同的ISession,这样导致了系统性能的迅速下降。

从网上找了一些资料,没有找到与优化ODP.net相关的东西。(这有一篇简单的Optimize Oracle-.NET Data Access)后来不得不想办法在DAO层使用缓存ISession的方法来解决,但是系统的改动比较大。

哪位有经验的,提供一些想法?

posted on 2005-04-12 00:31 wljcan 阅读(3307) 评论(8) 编辑 收藏

评论

#1楼  回复 引用 查看   

NH也支持ODP.NET访问Oracle呢,我一直以为不支持呢。
所以我在我的SPL(SmartPersistenceLayer)添加了这个功能,以为是SPL的优势呢。呵:)
2005-04-12 09:01 | 听棠.NET      

#2楼  回复 引用   

不知你用ODP.net做过测试没有,建立Connection有效率太低了,如果没有解决好的话,在实际应用中,会比较麻烦
2005-04-12 10:16 | wljcan

#3楼  回复 引用 查看   

ODP.NET应该是考虑了性能的,不可能ODP.NET面临严重的性能问题,那文章我看了,只是说可以更好的提高性能。
当然,可能是我数据不多的问题,没有暴露出严重的ODP.NET性能问题。但要是真有性能问题,能怎么办呢?
2005-04-12 15:06 | 听棠.NET      

#4楼  回复 引用   

要是用connection pooling的话, 不需要每次建立connection, ODP.net的connection string里有一些特殊参数,你可以看一下。
2005-04-12 20:33 | yyanghhong

#5楼  回复 引用   

相比其他的ORACLE provider, ODP.net的性能是比较好的,你可以看一下我以前的帖子。

http://www.cnblogs.com/yyanghhong/archive/2004/11/19/65532.html
http://www.cnblogs.com/yyanghhong/archive/2004/11/08/61418.html
2005-04-12 20:38 | yyanghhong

#6楼  回复 引用 查看   

對於session的管理:
http://www.cnblogs.com/jiezhi/archive/2005/01/17/92004.html
2005-04-13 09:19 | James      

#7楼[楼主]  回复 引用 查看   

to James:
我看你的blog,使用IHttpModule 的方式来实现对Session的管理确实比较好,但是在我们的应用中可能不太适用。

在我们目前的系统中,对分层做了严格的限定,在Web层是不能直接引用 NHibernate的,只能通过DAO层。即我们在DAO层中封装了NHibernate,它带来的最明显的好处就是O/R Mapping工具的移植方便,很容易将NHibernate替换成其它的O/R Mapping产品。

我们目前采用的方式是在服务器端缓存的方式来实现对Session的管理。
2005-04-16 17:58 | wljcan      

#8楼  回复 引用   

俺也觉的
Connection有效率太低了
http://www.online-ad.cn
2007-09-03 21:59 | seo[未注册用户]

导航

<2005年4月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

公告

昵称:wljcan
园龄:7年10个月
粉丝:2
关注:0

搜索

 
 

常用链接

随笔档案

相册

blog

技术

其它

最新评论

阅读排行榜

评论排行榜

推荐排行榜