2011-09-14 2 views
-4

.NET에서 Session 변수에 HashTable 컬렉션을 저장하려면 어떻게해야합니까? 불행히도 HashTable이나 Dictionary는 저장할 수 없습니다.세션에 해시 테이블을 저장하십시오.

도와주세요.

+1

왜 그렇게 할 수 없는지 설명해 주시면 도와 드리겠습니다. 무엇을 시도 했습니까? 어떤 문제가 있었습니까? –

+1

Hashtable이나 Dictionary를 저장할 수없는 이유는'Session' 변수에 저장할 수있는 완벽한 객체이기 때문에 정의하십시오. – f0x

+0

이러한 사전/해시 테이블에 어떤 종류의 개체를 저장하고 있습니까? 그들은 직렬화 가능합니까? 그리고 어떤 종류의 세션 상태 공급자 (proc, state server ... 등)를 사용하고 있습니까? –

답변

1

나는 대답을 얻었습니다. 코드에는 문제가 없었습니다. ie new keyword. 위의 단계에서 Session i에 저장 한 후 HashTable 항목을 지우는 중입니다.

  Hashtable ht = new Hashtable(); 
     if(condition){ 

     ht.Add("id", 1); 
     ht.Add("name", "ram"); 
     Session["hashtab"] = ht; 
     } 

     ht.Clear(); 

이 ht.Clear()가 문제였습니다. 나는 그것을 제거하고 아무런 문제가 없다. 이런 식이었습니다. 내가 그 코드를 제거했을 때 나를 위해 잘 작동했다.

0

해시 테이블을 세션에 저장할 수없고 세션에서 테이블이나 객체를 저장하는 것처럼 간단하기 때문에 세션에서 가져올 수없는 이유를 모르겠습니다. 귀하의 문제를 정확하게 이해하면 아래의 해결책을 제공 할 수 있습니다.

세션에 해시 테이블을 저장하려는 페이지에서 다음과 같이하십시오.

Hashtable ht = new Hashtable(); 
      ht.Add("id", 1); 
      ht.Add("name", "ram"); 
      Session["hashtab"] = ht; 

아래와 같이 다른 페이지에서 해시 테이블을 가져 오십시오.

Hashtable ht = new Hashtable(); ht = (해시 테이블) 세션 [ "hashtab"];

+2

해시 테이블을 가져 오면 새 테이블을 건너 뜁니다. 그것은 새로 생성 된 해시 테이블을 가리키고, 즉시 세션의 하나를 가리킨다. 따라서 첫 번째 할당은 시간과 메모리를 낭비하여 나중에 가비지 수집합니다. 이 경우 실제 병이 나지 않고도 계속 작동 할 것입니다. 그러나 단단한 루프에서 이렇게하면 시간과 메모리 낭비가 무시할 수 없을 정도로 커질 수 있습니다. – FastAl

관련 문제