- 积分
- 40165
- 好友
- 记录
- 主题
- 帖子
- 听众
- 收听
|
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()也会被自动调用。
还有只是有待研究。。。。
个人总结:只要你加上这两行代码,在整个应用网站中同时就只能有一个用户执行,可以解决并发的问题。
|
|