문제

서버에 ViewState를 저장하는 방법을 읽었습니다.

여기 하나가 있습니다

여기 또 다른 것이 있습니다

그러나 그들은 일종의 복잡합니다. 나는 객체를 직렬화하지 않고도 개체를 지속 할 수있는 방법을 찾고 있습니다. 세션 상태를 사용할 수 있지만 사용자가 둘 이상의 창을 열면 객체를 덮어 쓸 수 있습니다.

이것에 대한 간단한 해결책이 있습니까?

도움이 되었습니까?

해결책

이 상황에서는 고유 한 키를 사용하여 세션에 객체를 저장하고 키를 페이지에 묶습니다. 이 모든 것이 페이지 클래스의 속성으로 추상화 될 수 있습니다.

public string PersistanceKey
{
    get { 
        if(ViewState["PersistanceKey"] == null)
           ViewState["PersistanceKey"] = "Object" + Guid.NewGuid().ToString();

        return (string)ViewState["PersistanceKey"];
    }
}

public PersistanceObject Persistance
{
    get {
        if(Session[this.PersistanceKey] == null)
            Session[this.PersistanceKey] = new PersistanceObject();

        return (PersistanceObject)Session[this.PersistanceKey];
}

다른 세션 키는 PAGE 기준으로 다른 객체를 허용합니다. 또는 세션 객체를 사용하는 대신 응용 프로그램 캐시 (캐시 객체)를 사용하여 메모리에서 오래된 항목을 자동으로 제거하는 것을 고려할 수 있지만 자체 경고가 있습니다.

메모리 사용에 대한 그의 답변에 대한 Joel의 경고는 완전히 정확하다는 점에 유의해야합니다. 이는 저 메모리, 고수성 또는 대규모 객체 시나리오에 대한 최선의 아이디어가 아닐 수도 있습니다.

다른 팁

나는 객체를 직렬화하지 않고도 개체를 지속 할 수있는 방법을 찾고 있습니다.

조심하십시오. 이는 사이트의 메모리 사용에 큰 영향을 미치며 메모리 사용은 종종 확장성에 대한 가장 큰 장애입니다.

사용자가 열 수있는 각 창에 숫자를 할당하십시오. 해당 번호를 세션 키에 추가하십시오. 또한 적절한 세션 변수를 검색 할 수 있도록 페이지 어딘가에 번호를 페이지 어딘가에 저장해야합니다 (QueryString 또는 Hidden Input).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top