本帖最后由 redboy999 于 2010-04-15 20:00:18 编辑

解决方案 »

  1.   

    使用database   代替XML
    ReaderWriterLock
    多个线程   
      

  2.   

    这个lock对这个xml无效,Application.lock是锁定应用程序集合中的对象.
      

  3.   

    不会!
    你的思路是正确的!
    当Application.Lock之后,其它请求就无法进入到“相关读写XML文件的方法”的逻辑,也就意味着同一时刻只有一个请求能做这个事情,其它请求必须等待。但是,你那样写有潜在的巨大风险:
    如果你网站的访问量比较大的话,再加上“相关读写XML文件的方法”的操作时间比较长。我们假设这个操作需要30秒才能完成,再假设同一个时间有10个请求都在做这个操作,那么意味着第10个进来的请求要等到前面9个请求完成之后才能被执行,也就是说他要等待30*9=270秒。注意:Lock与UnLock之间的逻辑要尽量简单,以保证尽快完成
      

  4.   

    谢谢楼上几位的解答
    目前也就是做个在线人数统计功能,之所以用这个方式写xml也是想尽可能的获取到正确的当前session有多少.当达到上限就阻止进入指定url,如果不锁住xml的读写,在有可能出现的大量并发情况下可能超出人数上限,虽然有些使用session统计当前在线并非正真意义上的准确,但是我理解的是也要尽量保持服务器不要超过指定的session连接数量.
    说道这地方的逻辑也很简单就是直接读取服务器端xml文件找到指定节点然后修改数据,
    xml节点也很简单.
      

  5.   

    private static object obj=new object();public void XXX()
    {
      lock(obj)
      {
        //你的代码
      }
    }
      

  6.   


    那你干吗不直接把计数器的值保存在Application对象里面?
    Session_OnStart的时候计数器+1
    Session_OnEnd的时候计数器-1这样你也不需要自己考虑加锁了