NHibernate只读会话池?

时间:2012-02-14 16:28:04

标签: c# nhibernate

对于只读操作汇集NHibernate会话是否有任何里程?如果系统正在进行大量读取而只进行少量写入,那么创建一个会话池是否有意义,这些会话池会被重用以读取数据,并且只有在明确提交更改时才会打开新会话?

我认为,值得一提的是,如果你在一分钟内说出1000条请求来读取数据。如果这些读取在毫秒数上是短暂的,那么会话池(比如3)可能可以处理它们而不必创建和处理1000个会话。

2 个答案:

答案 0 :(得分:2)

创建和处理会话的权重非常轻,连接由连接池处理。 IMO没有使用会话池的好处。它有一个缺点,因为它在会话缓存中保存每个加载的对象,如果会话被重用,可能是内存泄漏和性能损失。

答案 1 :(得分:2)

您的想法适用于已经pooled的数据库连接,您无需执行任何特殊操作,默认情况下已启用。

NHibernate Session不等于数据库连接。 Session是NHibernate对Unit of Work模式的实现。池化工作单元可能很危险,因为每个工作单元都会保留已加载的所有对象(用于更改跟踪目的),因此无法对其进行垃圾回收。即使你在将它返回池之前清除UOW也没有意义,因为创建UOW / ISession很便宜,它不会分配数据库连接。

如果要使用NHibernate优化内存消耗,请查看此answer