http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 3763|回复: 0

[Asp.Net] application.lock 和application.unlock用法

[复制链接]
发表于 2013-1-7 16:45:48 | 显示全部楼层 |阅读模式
application.lock()在一般的情况下是用于并发访问时使用,对代码进行锁定的操作。     这里就牵涉到了application与session的一些基本知识了。
     (1)application对象用于共享应用程序级信息,即多个用户共享一个application对象,在第一个用户请求         
  asp.net文件时,将启动应用程序并创建application对象,一旦applicaition对象被创建,它就可以共享         
和管理整个应用程序的信息。在应用程序关闭之前,application对象将一直存在。所以,application     
  对象是用于 启动 和管理asp.net应用程序的主要对象。(比如最简单的统计访问人数,以及聊天室之类)
    (2) session对象是用于存储在多个页面调用之间特定用户的信息。session对象只针对单一网站使用者,不同     
      的客户端无法互相访问. session对象终中止于联机机器离线时,也就是当网站使用者关掉浏览器或者超过
     设定session对象的有效时间时,session对象变量就会关闭
    而一般的application对象定义在应用程序类(即Global.asax中)。下面给出一个简单的:
  [code=csharp]void Session_Start(object sender, EventArgs e)
    {
        // 在新会话启动时运行的代码
        Application.Lock();
        Application["sum"] = (int)Application["sum"] + 1;
       Application.UnLock();
    } [/code]
  对于这段代码:
  (1)注意类型要用int进行强制类型转换
  (2)是新会话启动时的代码,在这里,说明了application.lock是在两个session同时对count进行操作的时候              才起作用。具体的说,就是application.lock后在一个时刻只能供一个访问者使用.
         既是说,当一个用户在执行上面两者之间的代码时,其他的用户时不可以访问这段代码的.
         换句话说,它是在添加或者更新数据库记录的時候暂时锁定其它用户进行同样的操作。
  记得老师说的一个最简单形象的例子:就是在网上预定火车票的时候,当只剩下一张火车票的时候,在间隔极短的时间内有三个人都点击了预定的按钮,这时候数据库里面和返回的网页就会使三个人都认为自己买到了火车票。这时候就会出错。这也就是所谓的并发访问,在网速比较慢的时候体现的尤其明显,所以一般对于这种有并发访问可能的都会使用application.lock来预防上述情况发生。
  (3)在上述代码中没有application.unlock().   在Application.Lock()语句所在的作用域范围内,如果没调用Application.Unlock(),超出作用域范围后Application.Unlock()也会被自动调用。
  还有只是有待研究。。。。

个人总结:只要你加上这两行代码,在整个应用网站中同时就只能有一个用户执行,可以解决并发的问题。


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-5-3 05:08

© 2014-2021

快速回复 返回顶部 返回列表