세션에서 항목을 제거하는 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
'developer tip' 카테고리의 다른 글
MySQL의 Case 문 (0) | 2021.01.05 |
---|---|
PHP 용 AWS SDK : 인스턴스 프로필 메타 데이터 서버에서 자격 증명을 검색하는 동안 오류가 발생했습니다. (0) | 2021.01.05 |
저장 프로 시저를 만들지 않고 Oracle에서 여러 행을 어떻게 하나로 연결할 수 있습니까? (0) | 2021.01.05 |
C ++에서 동적 배열을 어떻게 초기화합니까? (0) | 2021.01.05 |
서버의 현재로드에 영향을주지 않도록 MySQL 덤프 속도를 줄이려면 어떻게해야합니까? (0) | 2021.01.05 |