通常您会将任何启动逻辑保留在Application_Start 事件中的Global.asax 文件中。但是这在第一个用户访问之前不会触发,如果你正在做一些繁重的处理,这需要很多时间,这对第一个用户来说可能会变得非常令人沮丧。
要克服这种情况,您可以将应用程序配置为自动启动并执行预加载逻辑。
为此,您需要创建一个实现IProcessHostPreloadClient 接口的类,并在其中编写您的初始化逻辑 -
public class ApplicationPreload : System.Web.Hosting.IProcessHostPreloadClient
{
public void Preload(string[] parameters)
{
// Write initialization and loading logic here
}
}
接下来您需要在applicationHost.config (C:\Windows\System32\inetsrv\config\applicationHost.config) 中注册相关信息,方法是将startMode="AlwaysRunning" 属性添加到适当的@ 987654328@ -
<applicationPools>
<add name="MyAppWorkerProcess" managedRuntimeVersion="v4.0" startMode="AlwaysRunning" />
</applicationPools>
在同一个文件中注册自动启动提供程序 -
<!-- Just AFTER closing the `sites` element AND AFTER `webLimits` tag -->
<serviceAutoStartProviders>
<add name="ApplicationPreload" type="WebApplication1.ApplicationPreload, WebApplication1" />
</serviceAutoStartProviders>
最后,在<Sites> 中,找到您的网站并指定提供商 -
<sites>
<site name="MySite" id="1">
<application path="/" serviceAutoStartEnabled="true"
serviceAutoStartProvider="ApplicationPreload" />
</site>
</sites>
如果您不喜欢对applicationHost.config 进行更改,也可以通过 IIS 进行这些更改。
更多细节可以在这里找到-http://weblogs.asp.net/scottgu/auto-start-asp-net-applications-vs-2010-and-net-4-0-series
话虽如此,如果您的设计允许,您还应该尽量减少启动时所需的数据量,并仅加载相关的上下文数据。