當我在Global.asax.cs中創建一個空的Session_Start處理程序時,它會在將頁面呈現給瀏覽器時產生重大打擊。爲什麼Global.asax.cs中的Session_Start會導致性能問題?
如何重現:
創建一個空的ASP.NET MVC 3 Web應用程序(我使用MVC 3 RC2)。 然後添加一個首頁控制器與此代碼:
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult Number(int id)
{
return Content(id.ToString());
}
}
接下來創建一個視圖主頁/ Index.cshtml並放置在主體部分如下:
@for (int n = 0; n < 20; n++)
{
<iframe src="@Url.Content("~/Home/Number/" + n)" width=100 height=100 />
}
當你運行這個頁面,你」我們將看到20個IFRAME出現在頁面上,每個IFRAME都在裏面有一個數字。我在這裏所做的就是創建一個頁面,在幕後加載20頁。在繼續之前,請注意這20頁的加載速度有多快(刷新頁面幾次以重複加載)。
接下來去你的Global.asax.cs並添加這個方法(是的,方法體爲空):
protected void Session_Start()
{
}
現在再次運行該頁面。這次你會注意到20個IFRAME的負載比較慢,一個接一個地相隔約1秒。這很奇怪,因爲我們實際上並沒有在Session_Start中做任何事情......這只是一個空的方法。但這似乎足以導致所有後續頁面的放緩。
有沒有人知道爲什麼會發生這種情況,而且更好的做法是否有人修復/解決方法?
我發現,當調試器附加該行爲只發生更新(按F5運行)。如果你在沒有附加調試器的情況下運行它(Ctrl-F5),那麼它看起來沒問題。所以,也許這不是一個重大的問題,但它仍然很奇怪。
我在SPA應用程序的AJAX請求中遇到了這個問題。指導我遠離使用SessionState。 – voam 2014-01-31 15:03:03