2010-05-07 4 views
0

다음과 같은 상황이 있습니다. 학교 그룹에서 사용할 온라인 시스템을 구축하고 있습니다. 한 번에 하나의 학교 만 시스템에 로그인 할 수 있으며 그 학교에서 약 13 명의 사용자를 확보하게됩니다. 그런 다음 작업을 완료하고 코드 관점에서 변수를 공유하는 교육 응용 프로그램을 진행합니다.공유 데이터에 asp.net/c#의 정적 클래스를 사용해야합니까?

공유해야하는 변수를 보유하는 정적 속성을 사용하여 정적 클래스를 설정하면 데이터베이스에 변수를 저장하거나 데이터베이스에서 변수에 액세스하지 않아도됩니다. 정적 변수는 응용 프로그램이 시작될 때 제대로 초기화되고 끝에 정리됩니다. 물론 변수를 스레드로부터 안전하게 보호하기 위해 get 및 set 메서드에 잠금을 설정해야합니다.

내 마음 속의 뭔가가이 일이 끔찍한 방법 일 수 있다고 말하고 있지만, 왜 그런지 정확히 모르겠다. 사람들이 내게 정적 클래스를 사용하여 자신의 생각을 나에게 줄 수 있다면 이 상황에서 나는 꽤 감사 할 것이다.

+0

왜 데이터베이스를 사용에 대한 혐오? 나는 심각하게 데이터베이스를 사용하는 것이 좋습니다 것이고 그냥 가자. 서버가 무릎을 꿇게되는 것은 아닙니다. 데스크탑에 있더라도 데이터베이스에 많은 요청을합니다. SQL Server Express는 무료입니다 ... – jcolebrand

+0

저는 데이터베이스를 이와 같이 사용하는 것에 반대하지 않습니다. 데이터베이스의 데이터를 서버의 메모리에 매우 쉽게 저장하고 나중에 폐기 할 수있는 데이터를 저장하는 데 불필요하다고 생각합니다. 한 번에 시스템을 사용하는 소수의 사람들 만이 실제로 성능에 대한 우려가 없다는 것을 알고 있습니다. 나는 대안을보고있었습니다. –

답변

3

웹 사이트에서 변수를 전역으로 공유하려면 "Application"이라는 변수가있는 ASP 페이지에서 사용할 수있는 응용 프로그램 상태 (System.Web.HttpApplicationState)를 사용해야합니다.

해시 테이블에 값을 저장하는 세션 변수와 동일하게 작동합니다. 유일한 것은 스레드 안전을 위해 잠금을 관리해야하지만, 잘 기억한다면 변수를 잠그고 잠금 해제하는 기본 제공 메서드 나 속성이 있다는 것입니다.

가 더 읽기 : http://msdn.microsoft.com/en-us/library/ms178594(v=VS.100).aspx

+0

사용자가 개별 로그인을 사용하는 경우 세션이 좋지 않습니다. – jcolebrand

+0

어쩌면 나는 더 설명해야한다 : 나는 세션 사용에 관해 아무 말도하지 않았다. 저는 세션이 사용자 단위라는 것을 압니다. 저는 Application 객체가 똑같이 작동한다는 것을 말하고있었습니다. 그냥하는 것처럼 Session [ "Key"] = value; 당신이하는 세션에 무언가를 저장하는 것 Application [ "Key"] = value; 차이점은 Application 개체가 웹 사이트에 대해 전역이므로 사용자가 웹 사이트에 삽입 한 값을 다른 사용자로부터 읽고 수정할 수 있다는 것입니다. 또한 Application.Lock()을 수행해야합니다. 및 Application.Unlock(); 그것을 조작하기 전에. – StevenGilligan

+0

그래도 그가 데이터베이스 사용을 거부하면 세션을 시도하고 사용할 가능성이 완전히 있습니다. 그냥 내가 지적했다. – jcolebrand

관련 문제