关于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功能的浏览器,会出现这个问题?
------解决方案--------------------