日期:2014-05-17  浏览次数:20560 次

关于Global.asax.cs里的成员变量是否共享的疑问
没有找到相关资料讨论Global类的成员变量,一开始我认为成员变量对多并发用户是互斥的,所以在Global里定义了Stopwatch变量,用于统计每次访问的时间,后来发现成员变量是共享的,但是实际测试,发现了一些不理解的现象,代码如下:
C# code
private Stopwatch watch = new Stopwatch();
private int abc = -1;
void Application_BeginRequest(object sender, EventArgs e)
{
    Response.Write((abc++) + " " + watch.GetHashCode() + " " + watch.IsRunning + " " + watch.ElapsedTicks + "<br />");
    // 请求开始
    watch.Start();
    Response.Write((abc++) + " " + watch.GetHashCode() + " " + watch.IsRunning + " " + watch.ElapsedTicks + "<br />");
    Thread.Sleep(10000);
    Response.Write((abc++) + " " + watch.GetHashCode() + " " + watch.IsRunning + " " + watch.ElapsedTicks + "<br />");
}



下面是测试结果,注:用不同浏览器是为了避免相同Session导致问题,事实上返回结果跟浏览器无关
Chrome开始访问,结果为
 -1 28372289 False 0
 0 28372289 True 1066
 1 28372289 True 25932497370

Chrome等待大约3,4秒,
IE开始访问,结果为:
 -1 64923656 False 0
 0 64923656 True 1183
 1 64923656 True 25932246860

IE等待大约3,4秒,
Firefox开始访问,结果为:
 -1 52307948 False 0
 0 52307948 True 871
 1 52307948 True 25933097411


再来一次
Chrome开始访问,结果为
 2 28372289 False 28633217106
 3 28372289 True 28633218211
 4 28372289 True 54566682053

Chrome等待大约3,4秒,
IE开始访问,结果为:
 2 52307948 False 28586556258
 3 52307948 True 28586557480
 4 52307948 True 54521157444

IE等待大约3,4秒,
Firefox开始访问,结果为:
 -1 1495183 False 0
 0 1495183 True 1313
 1 1495183 True 25932861617

从上面的结果来看,Global的成员变量,在不同用户间,时而共享,时而不共享?
有没达人解释一下?或者有没有Global里的成员变量的说明文档之类,我没找到

------解决方案--------------------
你的意思是不是同一个浏览器,比如IE6.0 以上吧,具有tab功能的浏览器,会出现这个问题?
------解决方案--------------------