developer tip

세션에서 항목을 제거하는 ASP.NET?

optionbox 2021. 1. 5. 07:58
반응형

세션에서 항목을 제거하는 ASP.NET?


어떤 방법이 선호됩니까?

Session.Remove("foo");

Session["foo"] = null;

차이가 있습니까?


차이가 있습니까?

있습니다. Session.Remove(key)딕셔너리에서 항목 (키와 값 모두)을 삭제하고 키 Session[key] = null에 값 (null이 됨)을 할당합니다. 이전 통화 후에는 키가 Session#Keys컬렉션에 표시되지 않습니다 . 그러나 후자 이후에도 키 컬렉션에서 키를 찾을 수 있습니다.


나는 이것이 오래된 스레드라는 것을 알고 있지만 확실히 고수 Session["key"] = null-훨씬 더 빠릅니다! 몇 가지 테스트 (InProc 세션 상태에서)를 수행하여 1000 개의 항목을 연속으로 제거했습니다 (경과 시간은 총 1000 개 항목에 대한 것이므로 한 항목에 대한 평균 시간을 원한다면 1000으로 나누십시오).

1000 개의 기존 항목 제거 :

Session[key] = null; - 0.82380000000000009 ms
Session.Remove(key); - 59.960100000000004 ms

기존 항목이 아닌 1000 개 제거 :

Session[key] = null; - 1.5368000000000002 ms
Session.Remove(key); - 0.6621 ms

기존 항목 500 개 및 기존 항목이 아닌 항목 500 개 제거 :

Session[key] = null; - 1.0432000000000001 ms
Session.Remove(key); - 33.9502 ms

다음은 첫 번째 테스트를위한 코드입니다.

Session.Clear();

for (int i = 0; i < 1000; i++)
    Session[i.ToString()] = new object();

Stopwatch sw1 = Stopwatch.StartNew();
for (int i = 0; i < 1000; i++)
    Session[i.ToString()] = null;
sw1.Stop();

Session.Clear();

for (int i = 0; i < 1000; i++)
    Session[i.ToString()] = new object();

Stopwatch sw2 = Stopwatch.StartNew();
for (int i = 0; i < 1000; i++)
    Session.Remove(i.ToString());
sw2.Stop();

나는 제거와 함께 갈 것이지만 차이점이 있다면 솔직히 말할 수 없습니다. 추측으로는 여전히 해당 null 값에 대해 빈 키가 유지되지만 확실하지 않을 수 있습니다. Remove는 나에게 의심의 여지가 없으며 그것이 당신이 원하는 것이라면 코드에서도 더 잘 읽습니다 .


같은 효과가 있습니다. 저는 개인적으로이 Session.Remove방법이 프로그래머의 의도를 더 잘 표현 한다고 생각합니다 .

다음은 MSDN 설명서에 대한 링크입니다.

"HttpSessionState.Item 속성 :

속성 값 형식 : System.Object

지정된 이름의 세션 상태 값이거나 항목이없는 경우 Null 참조 (Visual Basic의 경우 Nothing)입니다."


가장 큰 차이점은 세션에서 읽는 방법입니다.

if(Session.ContainsKey["foo"]) { return Session["foo"]; }

또는

if(Session["foo"] != null) { return Session["foo"]; }

If you use the first method, setting the value to null will not work, and you should use remove.

If you use the second method, you can set the value to null.

ReferenceURL : https://stackoverflow.com/questions/261920/asp-net-removing-an-item-from-session

반응형