application.lock
application.lock,application.unlock针对的是application变量,不是针对数据库对象!! 2、锁住和释放Application全局变量,只能锁住Application,在lock和unlock之间的其他变量不会被锁
3、当一个用户访问的时候,只要用了Application.Lock,那么,整个Application应用程序状态对象都被锁定了,不能有所选择的锁定应用程序状态里的项,,锁定应用程序状态将阻止其他所有的线程对任何项的访问,也就是这个原因,如果在大容量的web站点轻率的使用application,会给性能带来严重影响
4、严格点说,把它说成"线程同步"并不恰当.因为在锁定的这段时间内,执行的操作一定要非常短.比如仅仅是:a = 1 之类的非常快速的代码.
Synchronize是为了解决线程同步操作同一个物件导致的并发问题而存在的,所以应该称为"线程同步解决方法"或者更为恰当.
using System;
using System.Collections; using System.Configuration; using System.Data; using System.Linq; using System.Web; using System.Web.Security; using System.Web.SessionState; using System.Xml.Linq; namespace InterfaceDemo
{ public class Global : System.Web.HttpApplication { protected void Application_Start(object sender, EventArgs e)
{ if (Application["users"] == null) Application["users"] = 0; Application.Lock();//锁定应用程序 Application["users"] = (int)Application["users"] + 1; Application.UnLock();//解开锁定应用程序 } protected void Session_Start(object sender, EventArgs e)
{ }
protected void Application_BeginRequest(object sender, EventArgs e)
{ }
protected void Application_AuthenticateRequest(object sender, EventArgs e)
{ }
protected void Application_Error(object sender, EventArgs e)
{ }
protected void Session_End(object sender, EventArgs e)
{ }
protected void Application_End(object sender, EventArgs e)
{ Application.Lock();//锁定应用程序 Application["users"] = (int)Application["users"] - 1; Application.UnLock();//解开锁定应用程序 } } } using System;
using System.Collections; using System.Configuration; using System.Data; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Xml.Linq; namespace InterfaceDemo
{ public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { Response.Write("在线人数:"+Application["users"].ToString()); } } } |
|