靜態構造函數通常你會繼續在Global.asax
文件中Application_Start
事件中的任何啓動邏輯。但是,直到第一次用戶訪問時纔會觸發,如果您正在進行一些耗費大量時間的繁重處理,那麼第一個用戶可能會感到非常沮喪。
要克服這種情況,可以將應用程序配置爲自動啓動並執行預加載邏輯。
爲此,你需要創建一個實現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 \設置\的applicationHost.config)通過添加startMode="AlwaysRunning"
屬性到適當<applicationPools>
-
<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
說了這麼多,你也應該儘量避免在啓動時所需的數據量和負載只是相關的情境數據,如果您的設計允許被發現。
「可能延遲」還是「延遲」?你是否已經證明在你嘗試解決它之前它確實是一個問題?您知道上下文不會將模型中的所有數據加載到該模型中,對嗎? –