2009-04-02 3 views
3

큰 응용 프로그램을 구축 중이며 단순한 세션을 사용하여 개인 전역 정보를 저장하지만 응용 프로그램이 다소 클 수 있으므로이 문제는 메모리 세션의 양.ASP.NET 전역 변수 저장 - 모든 페이지에서 액세스 가능

이러한 변수를 저장하는 더 좋은 방법이 있습니까?

예를 들어, 사용자가 로그인 할 때마다 매번 데이터베이스를 쿼리하지 않고도 해당 사용자에 대한 데이터를 저장하고 필요한 곳에 표시하려고합니다.

답변

3

세션은 여기에가는 길입니다. 세션은 요청간에 현재 세션에 대한 정보를 유지하기위한 것입니다. 이 의도가있는 ASP.NET 프레임 워크에는 다른 개체가 없습니다.

캐시를 사용하거나 응용 프로그램 컬렉션에 저장할 수 있지만 개별 세션 데이터를 고유하게 식별하는 것은 귀하의 책임입니다.

세션이 종료되고 해당 컬렉션 (캐시 또는 응용 프로그램)에 저장된 인스턴스를 확보 할 때 처리해야 할 것은 또한 무엇입니까.

당신이 "생각할"수있는 것을 토대로이 질문을하는 것은 정말 좋은 생각이 아닙니다. 이는 조숙 한 최적화의 한 형태이므로 피해야합니다. 오히려 이러한 목적으로 의도 된대로 세션을 사용하고 병목 현상이 발생한 위치를 측정하여 해결할 때 성능을 테스트 할 때 문제가되어야합니다.

3

사용 쿠키 - 그들은 상관없이 당신의로드 밸런싱 환경에서의 작동합니다

다른 옵션은 다음과 같습니다 : SQL 데이터베이스에 sessionvalues를 작성

1) - 당신이 세션 상태를 구성하기 위해 asp.net 응용 프로그램을 구성 할 수 있습니다 SQL 서버를 사용하는 - 그러나 이것은 세션이 절대로 시간 초과되지 않으므로 자체 문제가 있습니다. (따라서 코드를 명시 적으로 처리해야합니다.)

2) SQL 서버를 사용하지 않는 경우 - 기본적으로 너무 많은 사용자는 웹 서버에로드 균형 조정을 구현하므로 사용자는 다른 웹으로 이동할 수 있습니다 같은 세션에서 서버 (그것이 작동하지 않을 것) 작업이 너무 주변에있다

- 그라고 STICKY SESSIONS - 웹 서버가 사용자를 보장하고자 항상 세션 내에서 동일한 웹 서버를 공격

3) .net 2.0 공급자 모델을 사용하면 대리인을 구현하여 자신의 세션 저장소 공급자를 작성할 수도 있습니다. 따라서 웹 서버/공유 서버에서 자신의 XML 파일을 만들어 세션 데이터를 읽고 쓸 수 있습니다 .-)

이렇게 여러 가지 방법으로 해결할 수 있습니다. 그러나 가장 간단하고 비용 효율적인 솔루션은 쿠키를 사용하는 것입니다.

1

캐시를 사용할 수 있습니다. 그건 메모리가 부족할 때 무료로 메커니즘을 가지고 ...

+0

클라이언트 쿠키 설정에 의존하지 않습니다. – annakata

0

당신의 데이터가 너무 큰 세션으로 생각한다면, 나는 당신이 불필요하지 않도록 캐시를 사용하여 일종의 데이터베이스를 고려할 것입니다 전화.

0

저장하는 사용자 별 세션 데이터 인 경우 ASP.NET 세션을 사용하는 것이 가장 좋습니다. 메모리 사용에 대해 가장 걱정이된다면 MSSQL 모드를 사용할 수 있습니다. 데이터는 어딘가에 있어야하며 사용할 세션 모드는 환경 및 사용자의 사용 패턴에 따라 다릅니다.

0

세션 상태의 크기에 문제가있어 문제를보고 해결하기 전까지는 문제가되지 않는다고 가정하십시오. 예를 들어, 응용 프로그램 전체가 많은 양의 세션 상태를 사용할 수 있지만 주어진 사용자가 세션 중에 많이 사용하지 않을 수도 있습니다.

기본 세션 상태 공급자에서 SQL 공급자 또는 상태 서버 공급자로 변경하면 메모리 문제가 완화 될 수도 있습니다.

캐시를 사용할 수 있지만 캐시는 응용 프로그램 전체에 적용됩니다. 사용자 ID 또는 세션 ID가 Cache[userID + ".MyCacheEntry"] 인 캐시 항목을 한정해야합니다.

어떠한 경우에도 정적 변수를 사용하여이 데이터를 저장하지 마십시오. 귀하의 제목에 의해 제안 된 것처럼, 그들은 응용 프로그램 전체, 사용자가 아닌 사용자입니다.

1

확실히 쿠키를 사용하십시오. 가장 좋은 방법은 쿠키가 null인지 확인하고, httpcontext에 액세스하는 등 모든 어려운 작업을 수행 할 쿠키 래퍼 클래스를 만드는 것입니다. 모든 코드를 망칠 필요가 없습니다. 쿠키를 .cs 또는 .vb로 모두 추상화하십시오.

SetCookieValue(someValue, cookieName); //there will be some expiration concerns here as well 

myValue = GetCookieValue(cookieName); 

Christian Weiss has a good strategy.