c# - 同步对 ASP.NET session 成员的访问

标签 c# asp.net synchronization

我正在构建一个 Javascript 应用程序并且 eash 用户有一个单独的 UserSession。该应用程序发出一堆 Ajax 调用。每个 Ajax 调用都需要为用户访问单个 UserSession 对象。

  1. 每个 Ajax 调用都需要一个 UserSession 对象。

  2. UserSession 对象中的数据对于每个用户都是唯一的。

最初,在每次 Ajax 调用期间,我都会创建一个新的 UserSession 对象,并且它的数据成员存储在 ASP.NET session 中。但是,我发现 UserSession 对象被实例化了很多。为了尽量减少 UserSession 对象的构造,我将其包装在单例模式中并同步访问它。

我相信同步会在整个应用程序范围内发生,但我只需要对每个用户进行同步。我在这里看到一篇文章说 ASP.NET 缓存是同步的,但是创建对象和将其插入缓存之间的时间另一个线程可以开始构建它是另一个对象并将其插入缓存。

这是我当前同步访问对象的方式。有没有比使用“锁定”更好的方法...应该锁定 HttpContext.Session 对象?

private static object SessionLock = new object();

public static WebSession GetSession
{
    get
    {
        lock (SessionLock)
        {
            try
            {
                var context = HttpContext.Current;
                WebSession result = null;

                if (context.Session["MySession"] == null)
                {
                    result = new WebSession(context);
                    context.Session["MySession"] = result;
                }
                else
                {
                    result = (WebSession)context.Session["MySession"];
                }

                return result;
            }
            catch (Exception ex)
            {
                ex.Handle();
                return null;
            }
        }
    }
}

最佳答案

您不需要锁定 session 状态访问。

The physical values of a session state are locked for the time needed to complete a request. The lock is managed internally by the HTTP module and used to synchronize access to the session state.

http://msdn.microsoft.com/en-us/library/aa479041.aspx

关于c# - 同步对 ASP.NET session 成员的访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2715532/

相关文章:

C++ 从主线程调用方法

c# - 在 asp.net 中为 excel 表提供背景颜色

asp.net - 在 IIS7 经典模式下,cs 用户名未显示在 IIS 日志中

javascript - 如何将 C# 字符串数组与 Angular ng-init 一起使用?

c# - Mahapps 减慢 WPF 应用程序

java - 使用使用 Runnable 的线程和派生的 Thread 类之间的行为存在意外差异

algorithm - 需要用属性时间同步两个列表,但时间不相等

c# - gridview 以编程方式编辑模式

c# - LINQ Lambda 代码 groupby orderby 的效率

c# - 如何使用 Entity Framework 在 XAF 中实现真正的 Master-Detail?