如何在构建后自动实例化单例?

时间:2011-11-16 20:16:44

标签: c# asp.net singleton build-automation instantiation

我有一个ASP.NET 2 C#应用程序,它使用Singleton从数据库加载大量数据。

这个单身人士的第一个请求非常慢(如预期的那样)。随后的速度非常快。有没有在项目建成后立即实例化单例?

3 个答案:

答案 0 :(得分:0)

在没有运行实际应用程序的情况下构建单例后,无法直接从数据库中填充单例。您可以通过在应用程序的其余部分(在Application_Start)中的单独线程上填充单例来加快速度,但是如果在完全加载之前使用单例,则无法解决减速问题(并且还需要添加锁定逻辑)。

您是否有特定原因将数据库中的大量数据加载到单例中?

答案 1 :(得分:0)

可以将代码填充到global.asax.cs中的Application_Start方法中填充单例。

来自MSDN

  

在请求ASP.NET应用程序中的第一个资源(例如页面)时调用。在应用程序的生命周期中,Application_Start方法仅被调用一次。您可以使用此方法执行启动任务,例如将数据加载到缓存中以及初始化静态值。

答案 2 :(得分:-2)

使用WebActivator将其创建为App_Start配置类。

假设您的应用程序设置为虚拟目录,App_Start中的代码将在构建后立即调用。

注意,这会让你看起来你的版本“慢”。另请注意,如果在此代码中出现异常,您实际上会收到“构建失败”,其中包含类似于以下内容的奥术错误消息:

Exception has been thrown by the target of an invocation.. ASPRUNTIME ProjectName

这意味着您需要在浏览器中浏览到您的应用以查看真实的错误消息。

当我们将EF迁移绑定到App_Start配置时,我们遇到了所有这些。