[探讨]应用Applicationduixiang,实现负载平衡任务时,对效率的影响。在我的项目中,Web服务器可以访问若干个业务服务器(提供业务逻辑的实现、数据库访问、文件下载等功能),现在我希望最终用户总数能使用负载最低的业务服务器,所以我利用Asp.net的Application对象统计每个业务服务器在给多少个用户提供服务。
现在我担心的是,更改Application对象的内容时,需要Lock以串行化访问。
请讨论,如果只是这样的代码:
Application.Lock;
Application["Server1Count"]=Application["Server1Count"]+1;
Application.UnLock;
对于500个用户同时访问的情况下。对效率有多大影响?以及有什么方法可以避免或减轻这种对效率的影响。

解决方案 »

  1.   

    [探讨]应用Application,实现负载平衡任务时,对效率的影响。在我的项目中,Web服务器可以访问若干个业务服务器(提供业务逻辑的实现、数据库访问、文件下载等功能),现在我希望最终用户总数能使用负载最低的业务服务器,所以我利用Asp.net的Application对象统计每个业务服务器在给多少个用户提供服务。
    现在我担心的是,更改Application对象的内容时,需要Lock以串行化访问。
    请讨论,如果只是这样的代码:
    Application.Lock;
    Application["Server1Count"]=Application["Server1Count"]+1;
    Application.UnLock;
    对于500个用户同时访问的情况下。对效率有多大影响?以及有什么方法可以避免或减轻这种对效率的影响。
      

  2.   

    Application.Lock;
    Application["Server1Count"]=Application["Server1Count"]+1;
    Application.UnLock;-------------------------此代码是在用户第一次访问是运行还是每次访问都运行?只是简单的计数累加,效率应该不成问题。
      

  3.   

    >>jianyi0115(随意) ( 一星(中级)) Application.Lock;
    Application["Server1Count"]=Application["Server1Count"]+1;
    Application.UnLock;
    -------------------------
    此代码是在用户第一次访问是运行还是每次访问都运行?
    只是简单的计数累加,效率应该不成问题。
    -------------------------每次访问都运行
      

  4.   

    你是要做WEB服务器的负载均衡,还是业务服务器除了数据库的负载均衡要在逻辑层用代码控制(sql 2005已不用了)其他都应基于硬件,至少应是独立的负载均衡服务器WEB的负载均衡还要注意一下用户会话状态类信息在多服务中的共享,用ASP.NET自带的解决方案就可
      

  5.   

    TO wxwinter() 
    我是要做业务服务器的负载均衡。
    你说的我不太懂,能不能具体点儿,或相关资料。
      

  6.   

    用 Microsoft Application Center Test ,可以模拟出500人同时访问。
      

  7.   

    这种lock好像有点不划算。如果其它地方有一个耗时的东西lock,而跟"Server1Count"则任何关系,则此lock也需要白白等其它地方的lock释放。所以我认为不应该多用Application.Lock,而是有针对性的lock,比如另提供一个专供lock的对象:
    static public object SyncServer1Count = new object();然后更改Server1Count的值时:
    lock (SyncServer1Count)
    {
        Application["Server1Count"]=Application["Server1Count"]+1;
    }
      

  8.   

    而跟"Server1Count"则任何关系,则此lock也需要白白等其它地方的lock释放。
    ---->
    而跟"Server1Count"无任何关系,则此lock也需要白白等其它地方的lock释放。//上面写错了比如:
    Application.Lock();
    Application["Table"]=......//当然,如果所有lock都比较合适,中间只是一个赋值操作,其实也不算什么,就怕其中一个lock要进行长时间计算,那其它的lock就惨了
    Application.UnLock();
      

  9.   

    http://community.csdn.net/Expert/topic/5021/5021281.xml?temp=.5208551