NHibernate只读会话池

本文关键字:会话 只读 NHibernate | 更新日期: 2023-09-27 18:24:48

为只读操作池化NHibernate会话是否有任何好处?在一个系统进行大量读取而只进行少量写入的情况下,创建一个可重复用于读取数据的会话池,并且只有在明确必须提交更改时才打开新会话,这有意义吗?

我的想法是,值得一提的是,如果你在一分钟内收到1000个读取数据的请求。如果这些读取以毫秒为单位是短暂的,那么一个会话池(比如3个)可能可以处理所有的读取,而不必创建和处理1000个会话。

NHibernate只读会话池

您的想法适用于已经池化的数据库连接,您不需要做任何特殊的事情,它是默认启用的。

NHibernate会话不等于数据库连接。会议是NHibernate对工作单元模式的实施。汇集工作单元可能很危险,因为每个工作单元都保留着它加载的所有对象(用于更改跟踪目的),因此它们不能被垃圾收集。即使在将UOW返回到池之前清除它,也没有意义,因为创建UOW/ISession很便宜,它不会分配数据库连接。

如果你想用NHibernate优化内存消耗,看看这个答案。

创建和处理会话非常轻,连接由连接池处理。国际海事组织使用会话池没有任何好处。它有一个缺点,因为它将每个加载的对象都保存在会话缓存中,如果重用会话,这可能会导致内存泄漏和性能下降。