programing

ASP.NET이 세션에서 항목을 제거하시겠습니까?

elecom 2023. 8. 1. 20:17
반응형

ASP.NET이 세션에서 항목을 제거하시겠습니까?

어떤 방법이 선호됩니까?

Session.Remove("foo");

Session["foo"] = null;

차이가 있나요?

차이가 있나요?

있어.Session.Remove(key)사전에서 항목(키 및 값 모두)을 삭제하는 동안Session[key] = null키에 값(null인 경우도 있음)을 할당합니다.이전 통화 후에는 키가 표시되지 않습니다.Session#Keys수집.그러나 후자 이후에도 키 컬렉션에서 키를 찾을 수 있습니다.

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

기존 항목 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();

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

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

"Http 세션 상태.항목 속성:

속성 값 유형: 시스템입니다.물건

지정된 이름의 세션 상태 값 또는 항목이 없는 경우 Null 참조(Visual Basic에서는 없음)."

저는 Remove와 함께 가고 싶지만 차이점이 있는지 솔직히 말할 수 없습니다.해당 null 값에 대한 빈 키가 여전히 남아 있을 수 있지만 확실하지는 않습니다.제거는 의심의 여지가 거의 없으며 만약 그것이 당신이 원하는 것이라면 그것은 코드에서도 더 잘 읽힙니다.

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

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

또는

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

첫 번째 방법을 사용할 경우 값을 null로 설정할 수 없으므로 제거를 사용해야 합니다.

두 번째 방법을 사용하는 경우 값을 null로 설정할 수 있습니다.

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

반응형