2012-02-14 54 views
2

有没有在汇聚NHibernate会话进行只读操作的任何里程?在系统正在进行大量读取操作并且只有少数几次写入操作的情况下,创建一个会话池以供读取数据时重用,并且只有在明确地提交更改时才打开一个新会话才有意义。NHibernate只读会话池?

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

回答

2

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

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

如果您想通过NHibernate优化内存消耗,请查看此answer

2

创建和配置会话的权重非常轻,连接由连接池处理。 IMO没有使用会话池的好处。它有一个缺点,因为它将会话缓存中的每个加载对象都包含在内,如果会话被重用,可能会导致内存泄漏和性能下降。