請considerer以下情形:ASP .NET應用程序生命週期+ Singleton實例壽命
- 我已經使用ASP .NET MVC 3框架創建一個完整的Web應用程序。現在我的應用程序由一個Web服務器管理。
- 在我的應用程序的服務器端收到HTTP請求。
- 實現單例設計模式的類在服務器端實例化。
- 響應被髮送到瀏覽器。
- 在我的應用程序的服務器端收到另一個HTTP請求。步驟2中使用的單例實例在服務器端仍然可用嗎?
我讀到一個ASP .NET應用程序的此頁面上的生命週期中的一些信息:http://msdn.microsoft.com/en-us/library/ms178473.aspx
但是,我還是沒能回答我的問題。
預先感謝您的幫助,未來
我剛纔VS2010下做了一些測試。
這裏是我的項目的主要組成部分的清單:
- 含指數HTTPGET操作方法的Home控制器。
- 由Index操作方法產生的視圖。
- 實現單例設計模式的SingletonTest類。
這裏是SingletonTest類的代碼:
public class SingletonTest
{
private int counter;
private static SingletonTest instance = null;
public int Counter
{
get
{
return counter;
}
}
public static SingletonTest Instance
{
get
{
if (instance == null)
instance = new SingletonTest();
return instance;
}
}
private SingletonTest()
{
counter = 0;
}
public void IncrementCounter()
{
counter++;
}
}
這裏是Index操作方法的代碼:
public ActionResult Index()
{
SingletonTest st = SingletonTest.Instance;
st.IncrementCounter();
return View();
}
這裏是視圖的代碼:
@SingletonTest.Instance.Counter
這裏我遵循的測試場景是:
- IIS服務器已由VS2010自動啓動。
- 我已經請求/ Home/Index/URL,然後顯示值1。
- 我已經請求了/ Home/Index/URL,然後顯示了值2。
- ...
該測試表明,在處理下一個請求時,在步驟1中所做的SingletonTest實例可用。 我想內存空間分配給我的Web服務器上的應用程序。
然後我停止了IIS服務器,並且我再次跟蹤了我的測試場景。 我得到了和以前一樣的結果:1,2,...
測試它創建同一應用程序的多個實例。創建一個內部遞增的單例,並在每次調用時返回一個值。如果您持續獲得相同的價值,那麼不會持續請求。 – Oded 2012-01-11 14:59:17