방법: 응용 프로그램 상태에 값 저장
업데이트: 2007년 11월
응용 프로그램 상태는 ASP.NET 응용 프로그램의 모든 클래스에서 사용할 수 있는 데이터 리포지토리입니다. 응용 프로그램 상태는 서버의 메모리에 저장되고 데이터베이스에서 정보를 저장하거나 가져오는 것보다 실행 속도가 빠릅니다. 단일 사용자 세션에만 해당되는 세션 상태와 달리 응용 프로그램 상태는 모든 사용자 및 세션에 적용됩니다. 따라서 사용자에 따라 변경되지 않고 자주 사용되는 소량의 데이터를 저장할 때 응용 프로그램 상태가 유용합니다.
응용 프로그램 상태는 사용자가 응용 프로그램 내에서 URL 리소스에 처음으로 액세스할 때 만들어지는 새 HttpApplicationState 클래스 인스턴스에 저장됩니다. HttpApplicationState 클래스는 Application 속성을 통해 노출됩니다.
응용 프로그램 상태는 데이터를 Object 데이터 형식으로 저장합니다. 따라서 데이터를 가져올 때는 적절한 형식으로 다시 변환해야 합니다.
응용 프로그램 상태는 서버의 메모리에 저장되므로 대량의 데이터를 응용 프로그램 상태에 저장하면 서버 메모리가 금방 채워질 수 있습니다. 응용 프로그램을 다시 시작하면 응용 프로그램 상태 데이터가 손실됩니다. 응용 프로그램 상태는 웹 팜의 여러 서버 간에 또는 웹 가든의 작업자 프로세스 간에 공유되지 않습니다. 마지막으로 응용 프로그램 상태는 자유 스레드이므로 응용 프로그램 상태에 저장되는 데이터에는 동기화 기능이 기본으로 제공되어야 합니다. 이러한 고려 사항에 대한 자세한 내용은 ASP.NET 응용 프로그램 상태 개요 및 ASP.NET 상태 관리 권장 사항을 참조하십시오.
응용 프로그램 상태에 값을 기록하려면
응용 프로그램에서 HttpApplicationState 클래스의 변수 값을 설정합니다.
다음 코드 예제에서는 응용 프로그램 변수 Message를 문자열로 설정하는 방법을 보여 줍니다.
Application("Message") = "Welcome to the Contoso site."
Application["Message"] = "Welcome to the Contoso site.";
응용 프로그램을 시작할 때 응용 프로그램 상태에 값을 기록하려면
응용 프로그램에 대한 Global.asax 파일의 Application_Start 처리기에서 응용 프로그램 상태 변수의 값을 설정합니다. 기본 .aspx 페이지에서와 마찬가지로 HttpApplicationState 클래스는 Application 개체를 통해 노출됩니다.
다음 코드 예제에서는 응용 프로그램 변수 Message를 문자열로 설정하고 PageRequestCount 변수를 0으로 초기화하는 방법을 보여 줍니다.
Application("Message") = "Welcome to the Contoso site." Application("PageRequestCount") = 0
Application["Message"] = "Welcome to the Contoso site."; Application["PageRequestCount"] = 0;
잠금이 설정된 응용 프로그램 상태에 값 기록
여러 스레드에서 동시에 응용 프로그램 상태 변수에 액세스할 수 있습니다. 따라서 잘못된 데이터가 기록되지 않게 하려면 값을 설정하기 전에 하나의 스레드에서만 쓸 수 있도록 응용 프로그램 상태를 잠가야 합니다.
참고: |
---|
다른 잠금 유형을 설정하지 않았으면 항상 lock 문 내에서 응용 프로그램 상태 데이터를 수정해야 합니다. 자세한 내용은 다중 스레딩을 위한 데이터 동기화를 참조하십시오. |
잠금이 설정된 응용 프로그램 상태에 값을 기록하려면
응용 프로그램 변수를 설정하는 코드에서 HttpApplicationState.Lock 메서드를 호출하고 응용 프로그램 상태 값을 설정한 다음, HttpApplicationState.UnLock 메서드를 호출하여 다른 쓰기 요청에 사용할 수 있도록 응용 프로그램 상태의 잠금을 해제합니다.
다음 코드 예제에서는 응용 프로그램 상태 잠금 및 잠금 해제 방법을 보여 줍니다. 이 코드에서는 PageRequestCount 변수를 1씩 증가시킨 다음 응용 프로그램 상태의 잠금을 해제합니다.
Application.Lock() Application("PageRequestCount") = _ CInt(Application("PageRequestCount")) + 1 Application.UnLock()
Application.Lock(); Application["PageRequestCount"] = ((int)Application["PageRequestCount"])+1; Application.UnLock();