ASP.NET MVC:会导致锁定的会话

背景

一直没有意识到会话的访问会导致会话锁定,现在想想这样设计是非常合理的,不过某些情况下这样会导致同一个会话的并发访问非常低(只能串行化),好在MS提供了机制让我们控制这种锁。

测试

A页面:缓存写入页面

1     public partial class Session_Lock_Test : System.Web.UI.Page
2     {
3         protected void Page_Load(object sender, EventArgs e)
4         {
5             this.Session["Data"] = DateTime.Now;
6 
7             this.Response.Write(this.Session["Data"]);
8         }
9     }

B页面:缓存读取页面(长时间)

1     public partial class Session_Lock_Read_Long_Test : System.Web.UI.Page
2     {
3         protected void Page_Load(object sender, EventArgs e)
4         {
5             System.Threading.Thread.Sleep(5000);
6 
7             this.Response.Write(this.Session["Data"].ToString() + DateTime.Now.Millisecond);
8         }
9     }

C页面:缓存读取页面(短时间)

1     public partial class Session_Lock_Read_Short_Test : System.Web.UI.Page
2     {
3         protected void Page_Load(object sender, EventArgs e)
4         {
5             this.Response.Write(this.Session["Data"].ToString() + DateTime.Now.Millisecond);
6         }
7     }

默认的情况下,如果我们先打开B,再打开C,会发现C始终在B之后显示。

如果修改为并行访问呢?

在WebForm中可以这样修改:

1 <%@ Page Language="C#" AutoEventWireup="true" EnableSessionState="ReadOnly" CodeBehind="Session_Lock_Read_Long_Test.aspx.cs" Inherits="WebFormStudy.Session_Lock_Read_Long_Test" %>

在Mvc中的可以这样修改:

1 [SessionState(SessionStateBehavior.ReadOnly)]

备注

因为IIS Express被我弄坏了,没法贴截图了。

参考资料:http://msdn.microsoft.com/zh-cn/library/ms178587(v=vs.100).aspx

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值