应用程序池回收后,ISessionFactory重新创建

时间:2012-01-15 19:35:19

标签: asp.net nhibernate iis application-pool

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

4 个答案:

答案 0 :(得分:2)

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

此处有更多信息:http://nhibernate.info/blog/2009/03/13/an-improvement-on-sessionfactory-initialization.html

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:1)

你不能做多少。应用程序池回收关闭您的应用程序...

我想你可以尝试通过让应用程序每2:45做一次事来欺骗回收者。

答案 3 :(得分:1)

您是否曾尝试阻止您的网站闲置?我使用免费uptime robot并每隔5分钟ping一次您的网站。此服务的好处是它只会请求您设置为监视器的页面标题,因此不会影响Google Analytics等日志记录。

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