2011-04-06 5 views
1

클래스의 인스턴스가 aspx 페이지의 부분 클래스에 만들어집니다. page_load 또는 button 메서드를 클릭하십시오. 클래스에 값을 설정하려고합니다. 하지만 각각의 포스트 백이 발생하면 새로운 인스턴스가 만들어지고 이전 값이 손실됩니다.asp.net에서 클래스의 인스턴스를 한 번만 만드는 방법

public partial class DatabaseSelection : System.Web.UI.Page 
    { 
     DBProperties dbpro; 
     Metadata obmeta;  

    protected void Page_Load(object sender, EventArgs e) 

     { 
      if (!IsPostBack) 
      { 
       dbpro = new DBProperties(); 

      } 

답변

3

가 :

응용 프로그램 [ "푸"] 새 MyClass의를 =(); 다른 답변보기 당신이 (여기 아닌 것 같습니다) 단일 요청에 필요한 경우

가 :

HttpContext.Current.Items [ "푸"] 새 MyClass의를 =();

이이 가로 질러 모든 옵션은 시나리오에 따라 다음을 요청해야하는 경우 :

  • 쿠키로 직렬화 (파이프 라인이 경우 문제는이를 사용하지 않도록 모든 요청에 ​​옮겨진됩니다) . 사용자 별 데이터에 적합합니다.
  • 세션에 저장 : Session [ "Foo"] = new MyClass(); // 나는 개인적으로이 옵션을 좋아하지 않는다. 왜냐하면 사용자 기반이 커짐에 따라 메모리 사용량이 증가하는 경향이 있기 때문이다. 그러나 이것이 작 으면 대역폭 소비와 성능을 증가시키지 않기 때문에 좋은 옵션이다. 사용자 단위 저장에 적합합니다. DB 또는 메모리 (및 기타)에 대한 지속성을 구성 할 수 있습니다.
  • 캐시에 저장하십시오. 이점은 수명이 다할 때 우수한 제어 기능을 제공하며 사용하는 키에 따라 사용자별로 유연성을 제공합니다.
  • ViewState에 저장하십시오. 단일 요청에 유용하며 확장 가능하지만 페이로드가 증가합니다. (ViewState에 같은 약) 숨겨진 VAR ​​

에서

  • 스토어는 내가 싱글 톤 패턴을 추천 할 것입니다 정말 모르겠습니다. 기술적으로 싱글 톤은 AppDomain이 Application 변수와 실질적으로 유사하면 오래 머무를 것입니다.

  • 1

    세션 상태에 액세스하는 메서드를 만들어서 이미 있으면 반환하려고합니다. 그렇지 않으면 세션을 생성하고 세션에 저장 한 다음 세션을 반환합니다.

    1

    개체를 포스트 백간에 유지하려면 세션/뷰 상태에 저장하거나 데이터베이스에 유지해야합니다. 당신이 응용 프로그램에서이 인스턴스가 응용 프로그램에 던져 또는 싱글 콜렉션 사용이 필요한 경우

    관련 문제