关于application.lock 2009.7.9

 看书的时候突然就不记得application.lock有什么用去了。查了下资料,小结下:

 

1.application.lock()在一般的情况下是用于并发访问所用的锁定。

   这里就牵涉到了application与session的一些基本知识了。

   (1)application对象用于共享应用程序级信息,即多个用户共享一个application对象,在第一个用户请求            asp.net文件时,将启动应用程序并创建application对象,一旦applicaition对象被创建,它就可以共享          和管理整个应用程序的信息。在应用程序关闭之前,application对象将一直存在。所以,application       对象是用于 启动 和管理asp.net应用程序的主要对象。(比如最简单的统计访问人数,以及聊天室之类)

  (2) session对象是用于存储在多个页面调用之间特定用户的信息。session对象只针对单一网站使用者,不同           的客户端无法互相访问. session对象终中止于联机机器离线时,也就是当网站使用者关掉浏览器或者超过           设定session对象的有效时间时,session对象变量就会关闭

 

  而一般的application对象定义在应用程序类(即Global.asax中)。下面给出一个简单的:

 

void Session_Start(object sender, EventArgs e) 
    { 
        // 在新会话启动时运行的代码 
        Application.Lock(); 
        Application["count"] = (int)Application["count"] + 1; 
      
    } 

 

对于这段代码:

 

(1)注意类型要用int进行强制类型转换

(2)是新会话启动时的代码,在这里,说明了application.lock是在两个session同时对count进行操作的时候              才起作用。具体的说,就是application.lock后在一个时刻只能供一个访问者使用.

 

       既是说,当一个用户在执行上面两者之间的代码时,其他的用户时不可以访问这段代码的.

 

       换句话说,它是在添加或者更新数据库记录的時候暂时锁定其它用户进行同样的操作。

 

记得老师说的一个最简单形象的例子:就是在网上预定火车票的时候,当只剩下一张火车票的时候,在间隔极短的时间内有三个人都点击了预定的按钮,这时候数据库里面和返回的网页就会使三个人都认为自己买到了火车票。这时候就会出错。这也就是所谓的并发访问,在网速比较慢的时候体现的尤其明显,所以一般对于这种有并发访问可能的都会使用application.lock来预防上述情况发生。

(3)在上述代码中没有application.unlock().   在Application.Lock()语句所在的作用域范围内,如果没调用Application.Unlock(),超出作用域范围后Application.Unlock()也会被自动调用。

 

还有只是有待研究。。。。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值