本文介绍了同步访问ASP.NET会话的成员的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我要建一个Javascript应用程序,eash用户都有一个单独的UserSession。该应用程序使得一堆的Ajax调用。每个Ajax调用需要为用户访问单个UserSession对象。
-
每个Ajax调用需要一个UserSession对象。
-
中的数据UserSession对象是唯一的每个用户
原来,每次Ajax调用的时候,我将创建一个新UserSession对象和它的数据成员被存储在ASP.NET会话。然而,我发现UserSession对象被实例化了很多。为了尽量减少UserSession对象的构造,我把它包在一个Singleton模式和sychronized对它的访问。
我相信同步发生广泛的应用,但是我只需要每个用户发生。我在这里看到一个帖子,说ASP.NET缓存是同步的,但创建对象,并将其插入到缓存中的另一个线程就可以开始建设它的另一个对象,并将其插入到缓存之间的时间。
下面是我目前正在同步访问对象的方式。难道还有比使用锁定......应在HttpContext.Session对象上被锁定?一个更好的办法
私有静态对象SessionLock =新的对象();公共静态WebSession的getSession
{
得到
{
锁定(SessionLock)
{
尝试
{
VAR语境= HttpContext.Current;
WebSession结果= NULL; 如果(context.Session [MySession的] == NULL)
{
结果=新WebSession(背景);
context.Session [MySession的] =结果;
}
其他
{
结果=(WebSession)context.Session [MySession的];
} 返回结果;
}
赶上(异常前)
{
ex.Handle();
返回null;
}
}
}
}
解决方案
您不需要锁定会话状态的访问。
http://msdn.microsoft.com/en-us/library/aa479041.aspx
这篇关于同步访问ASP.NET会话的成员的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!