【问题标题】:ISessionFactory recreates after app pool recycles应用程序池回收后 ISessionFactory 重新创建
【发布时间】:2012-01-15 19:35:18
【问题描述】:

我的共享主机提供商每 3 分钟设置一次 IIS 回收应用程序池以供闲置。 所以我的会话工厂经常重新创建(在应用程序启动时)。由于我有大约 70-100 个实体,因此构建工厂大约需要 2-5 秒。所以我的应用程序的冷启动相当长。我无法访问 IIS 设置。

【问题讨论】:

    标签: asp.net nhibernate iis application-pool


    【解决方案1】:

    您可以通过在构建时而不是运行时生成代理来抵消设置工厂的大量成本。 This article 解释了操作步骤。

    实际上,最简单的更改是要求应用程序池不要那么频繁地回收(因为这对您的应用程序来说是一项昂贵的操作)。我确信他们将超时设置为非常低的“性能”设置,但这确实会产生工作并减慢速度。

    您可能无法直接访问 IIS 设置,但这不应阻止您联系供应商的技术支持并解决问题。

    【讨论】:

    • 这是否适用于中等信任环境?它也兼容3.2吗?只是好奇而已……
    • IIRC,如果你想在中等信任的环境中使用延迟加载,预生成代理是必需的。所以它应该工作:)
    • 它想要我的 2.0:(。我的 NHIb 是 3.2
    【解决方案2】:

    如果您处于完全信任的环境中(值得怀疑,但提供商可能愿意与您合作),您可以尝试序列化您的配置,这样就不需要每次都重新构建。将所有实体映射合并到一个 XML 文档中也会有所帮助(只需将其作为构建步骤执行,这样使用映射就不会是一场噩梦)。

    更多信息在这里:http://nhibernate.info/blog/2009/03/13/an-improvement-on-sessionfactory-initialization.html

    【讨论】:

      【解决方案3】:

      您是否一开始就尝试阻止您的网站闲置?我使用 FREEuptime robot,每 5 分钟对您的网站执行一次 ping 操作。此服务的好处是它只请求您设置为监视器的页面的标题,因此不会影响诸如 Google Analytics 之类的日志记录。

      但是,您需要对此进行测试,以查看您的应用何时确实回收,以查看正常运行时间机器人是否与您的共享托管服务提供商一起使用。最好的方法是每次重新构建会话工厂时记录。

      【讨论】:

      • 感谢您的服务。我可以设置期间。例如到 2:30 ?
      • 不,但想知道你为什么想要这个?此服务每 5 分钟对您的站点进行一次 ping 操作,并在站点关闭时发送警报。
      • 我的空闲超时时间是 3 分钟,所以我需要每 3 分钟点击一次
      • 哦,我明白了,我以为您的意思是一天中的 2:30,而不是 2.5 分钟的间隔。 3 分钟是 非常 低空闲超时,因此您的托管服务提供商不是一个好的...我怀疑正常运行时间机器人不会在这里为您提供帮助,因为它是 5 分钟的间隔,我不认为你想自己写。我个人认为 NHibernate 和您的托管服务提供商不适合您。
      【解决方案4】:

      你无能为力。应用程序池回收会关闭您的应用程序...

      我想你可以通过让应用程序每 2:45 执行一次操作来欺骗回收站。

      【讨论】:

        猜你喜欢
        • 2011-08-28
        • 2010-09-19
        • 1970-01-01
        • 2014-10-16
        • 2015-01-07
        • 1970-01-01
        • 1970-01-01
        • 2011-05-05
        • 2019-11-22
        相关资源
        最近更新 更多