请问关于 Application.Lock();问题 本帖最后由 redboy999 于 2010-04-15 20:00:18 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 使用database 代替XMLReaderWriterLock多个线程 这个lock对这个xml无效,Application.lock是锁定应用程序集合中的对象. 不会!你的思路是正确的!当Application.Lock之后,其它请求就无法进入到“相关读写XML文件的方法”的逻辑,也就意味着同一时刻只有一个请求能做这个事情,其它请求必须等待。但是,你那样写有潜在的巨大风险:如果你网站的访问量比较大的话,再加上“相关读写XML文件的方法”的操作时间比较长。我们假设这个操作需要30秒才能完成,再假设同一个时间有10个请求都在做这个操作,那么意味着第10个进来的请求要等到前面9个请求完成之后才能被执行,也就是说他要等待30*9=270秒。注意:Lock与UnLock之间的逻辑要尽量简单,以保证尽快完成 谢谢楼上几位的解答目前也就是做个在线人数统计功能,之所以用这个方式写xml也是想尽可能的获取到正确的当前session有多少.当达到上限就阻止进入指定url,如果不锁住xml的读写,在有可能出现的大量并发情况下可能超出人数上限,虽然有些使用session统计当前在线并非正真意义上的准确,但是我理解的是也要尽量保持服务器不要超过指定的session连接数量.说道这地方的逻辑也很简单就是直接读取服务器端xml文件找到指定节点然后修改数据,xml节点也很简单. private static object obj=new object();public void XXX(){ lock(obj) { //你的代码 }} 那你干吗不直接把计数器的值保存在Application对象里面?Session_OnStart的时候计数器+1Session_OnEnd的时候计数器-1这样你也不需要自己考虑加锁了 如何自测ASP.NET网站漏洞 asp.net 正则表达式 问题! 以下网页如果用asp.net 该怎么做? 求助:部分代码不起作用。 为什么不回车不提交。鼠标点击才提交button 呢。 为什么在代码混合的ASPX页面中,这时if(!IsPostBack)语句好象不起作用了? 一个ASPX文件中包含ASP代码,应该怎么办? 菜鸟第二次发帖求助!!!!希望各位大哥来帮下啊。。。先多谢! 如何取得DataList中一个数据绑定列中的一个值?? 升级到Crystal 9中遇到的问题 关于.Net IIS MAXTHON SESSION丢失问题的疑问 asp.net gridview 编辑问题
ReaderWriterLock
多个线程
你的思路是正确的!
当Application.Lock之后,其它请求就无法进入到“相关读写XML文件的方法”的逻辑,也就意味着同一时刻只有一个请求能做这个事情,其它请求必须等待。但是,你那样写有潜在的巨大风险:
如果你网站的访问量比较大的话,再加上“相关读写XML文件的方法”的操作时间比较长。我们假设这个操作需要30秒才能完成,再假设同一个时间有10个请求都在做这个操作,那么意味着第10个进来的请求要等到前面9个请求完成之后才能被执行,也就是说他要等待30*9=270秒。注意:Lock与UnLock之间的逻辑要尽量简单,以保证尽快完成
目前也就是做个在线人数统计功能,之所以用这个方式写xml也是想尽可能的获取到正确的当前session有多少.当达到上限就阻止进入指定url,如果不锁住xml的读写,在有可能出现的大量并发情况下可能超出人数上限,虽然有些使用session统计当前在线并非正真意义上的准确,但是我理解的是也要尽量保持服务器不要超过指定的session连接数量.
说道这地方的逻辑也很简单就是直接读取服务器端xml文件找到指定节点然后修改数据,
xml节点也很简单.
{
lock(obj)
{
//你的代码
}
}
那你干吗不直接把计数器的值保存在Application对象里面?
Session_OnStart的时候计数器+1
Session_OnEnd的时候计数器-1这样你也不需要自己考虑加锁了