2011-11-11 4 views
3

나는 모든 응용 프로그램 인스턴스에서 공유되는 읽기 전용 목록을 가지고 있으며 자주 변경되지 않습니다. 이 목록에 액세스하려면 정적 클래스에서 속성을 만드는 것이 좋습니다. 목록은 정적 생성자의 데이터베이스에서 채워집니다. 매일 밤 재활용되도록 앱 풀을 설정하면 목록이 매일 최신 상태로 유지됩니다. 이것이 나쁜 생각 인 이유가 있습니까? 감사!정적 클래스에 적합합니까?

+2

는 나에게 잘 들립니다. struct/(sealed) 클래스로는 할 수 없었던 것은 없습니다. 모든 유형에는 정적 멤버가 포함될 수 있습니다. – sehe

+1

오, 아이들을 생각해보십시오. 목록을 수정 불가능한 컬렉션으로 노출하십시오. – sehe

답변

2

정적 클래스에는 아무런 문제가 없습니다. 비슷한 방식으로 작동하는 캐시를 사용할 수도 있습니다. 캐시를 사용하면 원하는 시간에 따라 캐시를 무효화 할 수 있다는 보너스를 얻을 수 있습니다.

2

이것은 좋은 해결책으로 보입니다. 봉인 된 클래스를 대신 사용하여 서브 클래스가 엉망이되는 것을 피할 수 있습니다.

전역 상태와 관련된 문제는 응용 프로그램에서 변경되는 경우입니다. 이 경우 문제가되지 않습니다.

+1

정적 클래스를 어떻게 씰 하시겠습니까? – sehe

+0

@sehe - 그 점을 발견해 주셔서 감사합니다. – Oded

+0

정적 클래스에 봉인을 추가 할 수 없습니다. 아무런 의미가 없으며 암시 적으로 봉인됩니다. – blowdart

0

정적 속성을 저장하는 방법을 이해해야합니다.

모든 정적 상태는 RuntimeType (정적 ctor가 호출 될 때 생성됨)의 인스턴스에 배치됩니다. C#을 통한 CLR은이 메커니즘을 자세히 설명합니다.

이 컬렉션은 모든 인스턴스에서 공유되지만 모든 잠재적 인 메모리 누수를 염두에 두어야합니다 (컬렉션 이벤트에 가입 할 때 상황을 상상해보십시오. 그들은 폐쇄 중입니다.)

이 접근법의 두 번째 단점은이 수집이 최신이 아니라는 것입니다. 세 번째 단점은이 컬렉션의 스레드 안전성에주의를 기울여야하므로 성능에 해를 끼칠 수 있다는 것입니다.

관련 문제