【问题标题】:NHibernate read only pool of sessions?NHibernate只读会话池?
【发布时间】:2012-02-14 16:28:04
【问题描述】:

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

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

【问题讨论】:

    标签: c# nhibernate


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2015-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多