当我在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