分享

全局应用程序类实现在线人数统计

 修行的嘟嘟 2010-05-01
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());
        }
    }
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多