ASP.NET_SessionId cookie在多个GET请求上减慢了Web服务器的速度

时间:2011-08-09 08:40:17

标签: asp.net asp.net-mvc asp.net-mvc-2 session cookies

我正在使用MS VisualStudio 2010 Express和http://localhost上的ASP.NET开发服务器测试我的ASP.NET MVC2 Web应用程序。 ASP.NET Framework是版本4。

我有一个页面,其中包含通过Action方法检索的图像列表,如下所示:

[HTML code]

<img src="/images/thumb_79c7b9f0-5939-43e5-a6d0-d5e43f4e8947.jpg" alt="image">

[Global.asax.cs中的路由配置]

public class MvcApplication : System.Web.HttpApplication
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.MapRoute(
            "Image",
            "images/{id}",
            new { controller = "Image", action = "Picture", id = "" }
        );
        // [...] other routing settings
    }
}

[图像控制器]

public class ImageController : Controller
{
    [AcceptVerbs(HttpVerbs.Get)]
    public ActionResult Picture(string id)
    {
        try
        {
            return File(ImageBasePath + id, "image/jpeg");
        }
        catch (Exception)
        {
        }
    }

    private string ImageBasePath
    {
        get { return HttpContext.Request.PhysicalApplicationPath + WebConfigurationManager.AppSettings["dbImageBasePath"]; }
    }
}

实际上,Picture动作方法在返回图像之前执行其他检查,这就是我通过动作方法返回图像的原因。

这里的问题是,当没有会话时(即localhost不存在ASP.NET_SessionId cookie),当ASP.NET_SessionId时,浏览器获取图像的时间非常短(约10ms) cookie确实存在,时间跳到500ms-1s。这种情况发生在任何浏览器上。

我已经完成了各种测试,我看到如果我在没有通过ASP.NET应用程序的情况下获取图像,那么ASP.NET_SessionId cookie不会影响加载时间。

看起来多个带有传递给Web应用程序的ASP.NET_SessionId cookie的HTTP GET请求会大大减慢应用程序本身的速度。

有没有人对这种奇怪的行为有解释?

非常感谢。

UPDATE 上述问题也发生在IIS7 Web服务器上,因此它不是特定于本地ASP.NET开发服务器。

1 个答案:

答案 0 :(得分:1)

ASP.NET一次只允许一个请求访问会话状态。因此,您的所有图像请求都将被序列化,并且您会看到很长的响应时间。

解决方法是禁用会话状态或将其设置为只读。在ASP.NET中,可以使用SessionState属性:

来完成
[SessionState(SessionStateBehaviour.Disabled)]
public class ImageController : Controller
{
 ...