【问题标题】:Session State removing and adding overhead会话状态删除和增加开销
【发布时间】:2009-02-05 05:11:40
【问题描述】:

以下是我通常如何处理 Session State 中的对象,我有一个 const 字符串作为会话名称,然后有一个带有 get 和 set 的属性。

我想知道是否有必要调用“Session.Remove()”(以保持干净整洁),以及是否有大量开销并执行此删除。

我有 Session.Remove 基本上是因为它让我感觉更好(我知道强迫症),让我觉得会话更干净,但我想知道它是否不需要。

private const string sesMyObject = "{C2CC72C3-1466-42D4-8579-CAA11F261D55}";
public MyObject MyObjectProperty
{
    get
    {
        return Session[sesMyObject] as MyObject;
    }
    set
    {
        Session.Remove(sesMyObject);
        Session.Add(sesMyObject, value);
    }
}

编辑 根据下面的答案,我已将我的属性更改为以下内容:

private const string sesMyObject = "{C2CC72C3-1466-42D4-8579-CAA11F261D55}";
public MyObject MyObjectProperty
{
    get
    {
        return Session[sesMyObject] as MyObject;
    }
    set
    {
        Session[sesMyObject] = value;
    }
}

谢谢!

【问题讨论】:

    标签: asp.net session-state


    【解决方案1】:

    如果您真的想要安全,请尝试将对象转换为 IDisposable,如果成功,请调用 Dispose。

    IDisposable sesDispObj =  Session[sesMyObject] as IDisposable;
    if (sesDispObj != null)
       sesDispObj.Dispose();
    

    除此之外,

     Session[sesMyObject] = value
    

    差不多
     Session.Remove(sesMyObject);        
     Session.Add(sesMyObject, value);
    

    【讨论】:

      【解决方案2】:

      这太过分了。参考MSDN

      如果名称参数指的是 现有会话状态项, 现有项目被覆盖 指定值。

      【讨论】:

        【解决方案3】:
        Session[sesMyObject] = value;
        

        更短,更易于阅读,并且性能应该稍好一些,但除非这段代码连续重复很多次,否则不会有什么不同。

        【讨论】:

          猜你喜欢
          • 2015-01-14
          • 1970-01-01
          • 2012-05-11
          • 1970-01-01
          • 2019-04-06
          • 2019-03-16
          • 2020-04-27
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多