각 실행 컨텍스트가 구성 정보를로드/다시로드하지 않아도 스레드 안전 인터페이스를 통해 사용자 지정 System.Configuration 기반 구성 데이터에 액세스하는 쉬운 방법이 있습니까? 이는 계산적으로 부담이 될 수 있습니다.System.Configuration의 스레드 안전 사용
System.Configuration 클래스 (모든?) 마이크로 소프트의 닷넷 라이브러리 설명서에서 다른 클래스는 다음 스레드 안전 정보와 주석이 대부분 같은 :
모든 공용 static (Visual Basic의 경우 Shared) 멤버 이 유형의 스레드는 안전합니다. 모든 인스턴스 멤버는 스레드로부터 안전하지 않을 수 있습니다. 이 내 읽어
는 ConfigurationSection
개체 (예 OpenExeConfiguration(string exePath).GetSection(string)
)는 스레드 안전하다고 가정해서는 안 ConfigurationManager.GetSection(string)
및 다른 유사한 방법에서 반환함으로써 여러 실행 컨텍스트에서 사용되어서는 안된다. 이렇게하면 섹션 객체에 대한 액세스가 안전 할 수는 있지만 객체 자체의 멤버는 안전하지 않기 때문에 스레드 안전성이있는 싱글 톤으로 ConfigurationSection
을 저장할 수 없습니다. GetSection
에
여러 차례 호출은, 그러나, 지금까지 초기화 후 변경 될 수없는 설정 파일의 재 해석하고 구성을 고려하여 높은 오버 헤드가 새 ConfigurationSection
인스턴스를 할당을 필요로 할 가능성이 높다. 또한 스레드 안전성을 가진 다른 객체에 구성 데이터를 복사하면 처음부터 기본 제공 구성 패키지를 사용하면 얻을 수있는 주요 이점 중 하나를 무력화하는 것처럼 보입니다 (많은 상용구없이 유형 변환되고 유효성이 검사 된 구성 정보에 쉽게 액세스 할 수 있습니다) 암호).
그렇다면 과도한 구문 분석과 구성 섹션 할당에 의존하지 않고 System.Configuration
을 스레드로부터 안전하게 사용할 수 있습니까? 자신의 ConfigurationSection
을 구현하면 System.Configuration
인터페이스를 통해 액세스하는 경우에도 Microsoft가 제공하는 보증의 부족으로부터 자유 로워집니다 (그렇다면 기본으로 액세스 할 때 스레드로부터 안전 할 수 있도록 구현하는 방법은 무엇입니까? ConfigurationSection
의 인덱서). 구성된 데이터에 액세스하는 데 필요합니까?)
저는 IIS 서버가 지난 5 개월 동안 무작위 적으로 충돌하고있었습니다. MSCorLib에서 스택 오버플로가 발생하는 이유는 알 수 없었습니다. 내 dev 컴퓨터에서 일어날 때까지는, 그리고 appsettings 호출로 인해 발생했습니다. 나는 이것이 나의 질문에 대답한다고 생각한다. 감사. –