【发布时间】:2012-01-15 19:35:18
【问题描述】:
我的共享主机提供商每 3 分钟设置一次 IIS 回收应用程序池以供闲置。 所以我的会话工厂经常重新创建(在应用程序启动时)。由于我有大约 70-100 个实体,因此构建工厂大约需要 2-5 秒。所以我的应用程序的冷启动相当长。我无法访问 IIS 设置。
【问题讨论】:
标签: asp.net nhibernate iis application-pool
我的共享主机提供商每 3 分钟设置一次 IIS 回收应用程序池以供闲置。 所以我的会话工厂经常重新创建(在应用程序启动时)。由于我有大约 70-100 个实体,因此构建工厂大约需要 2-5 秒。所以我的应用程序的冷启动相当长。我无法访问 IIS 设置。
【问题讨论】:
标签: asp.net nhibernate iis application-pool
您可以通过在构建时而不是运行时生成代理来抵消设置工厂的大量成本。 This article 解释了操作步骤。
实际上,最简单的更改是要求应用程序池不要那么频繁地回收(因为这对您的应用程序来说是一项昂贵的操作)。我确信他们将超时设置为非常低的“性能”设置,但这确实会产生工作并减慢速度。
您可能无法直接访问 IIS 设置,但这不应阻止您联系供应商的技术支持并解决问题。
【讨论】:
如果您处于完全信任的环境中(值得怀疑,但提供商可能愿意与您合作),您可以尝试序列化您的配置,这样就不需要每次都重新构建。将所有实体映射合并到一个 XML 文档中也会有所帮助(只需将其作为构建步骤执行,这样使用映射就不会是一场噩梦)。
更多信息在这里:http://nhibernate.info/blog/2009/03/13/an-improvement-on-sessionfactory-initialization.html
【讨论】:
您是否一开始就尝试阻止您的网站闲置?我使用 FREE 的uptime robot,每 5 分钟对您的网站执行一次 ping 操作。此服务的好处是它只请求您设置为监视器的页面的标题,因此不会影响诸如 Google Analytics 之类的日志记录。
但是,您需要对此进行测试,以查看您的应用何时确实回收,以查看正常运行时间机器人是否与您的共享托管服务提供商一起使用。最好的方法是每次重新构建会话工厂时记录。
【讨论】:
你无能为力。应用程序池回收会关闭您的应用程序...
我想你可以通过让应用程序每 2:45 执行一次操作来欺骗回收站。
【讨论】: