3

以下是我通常如何处理会话状态中的对象,我有一个 const 字符串作为会话名称,然后有一个属性,其中包含对象的获取和设置。

我想知道是否有必要调用“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;
    }
}

谢谢!

4

3 回答 3

2

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

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

除此之外,

 Session[sesMyObject] = value

几乎一样

 Session.Remove(sesMyObject);        
 Session.Add(sesMyObject, value);
于 2009-02-04T19:16:38.997 回答
2

It's overkill. Refering MSDN

If the name parameter refers to an existing session state item, the existing item is overwritten with the specified value.

于 2009-02-04T19:17:26.093 回答
1
Session[sesMyObject] = value;

is shorter, simpler to read, and should have slightly better performance, but unless this code is being repeated very many times in succession, it shouldn't make a difference.

于 2009-02-04T19:19:49.660 回答