2014-10-09 4 views
9

, 우리는 지금처럼 <configSections> 요소를 사용하여 사용자 지정 구성 섹션을 만들 수 있습니다 위DictionarySectionHandler와 NameValueSectionHandler 사이에 차이점이 있습니까? .NET에서

<configuration> 
    <configSections> 
    <section name="dictionarySample" 
      type="System.Configuration.DictionarySectionHandler"/> 
    <section name="nameValueSample" 
      type="System.Configuration.NameValueSectionHandler" /> 
    </configSections> 
    <dictionarySample> 
    <add key="key1" 
     value="value1"/> 
    </dictionarySample> 
    <nameValueSample> 
    <add key="key2" 
     value="value2" /> 
    </nameValueSample> 
</configuration> 

, 나는 두 개의 섹션을 정의하고있다. 유형이 DictionarySectionHandler이고 유형이 NameValueSectionHandler입니다.

내가 알 수있는 한,이 두 핸들러는 똑같은 방식으로 사용되고 동일한 구성 섹션을 생성합니다.

그래서 차이점이 있습니까? 아니면 서로 바꾸어 사용할 수 있습니까?

답변

10

TL; DRNameValueSectionHandlerstring 괜찮지 - 간단한 상황에서>string쌍,하지만 당신은 구성을 필요로하는 경우, DictionarySectionHandler를 사용 (반복적 remove를 사용하는거야 특히 경우) 효율적으로.


나는이 두 클래스 ( NameValue, Dictionary)의 소스에 파고 및 구현에 아주 작은 차이를 발견했다.

는하지만, 주목할 두 가지 가치가 있습니다 DictionarySectionHandler 상점의 키/값 쌍을 Hashtable에, 반면 : 핸들러의 이름으로

  1. 는 암시, 주요 차이점은 사용 컬렉션에 NameValueSectionHandlerNameValueCollection을 사용합니다.
  2. DictionarySectionHandler에서 value은 필요하지 않으며 제공되지 않으면 빈 문자열로 기본 설정되지만 NameValueSectionHandlervalue이 필요합니다.

는 지금까지 HashtableNameValueCollection의 차이로, NameValueCollection 중복 키를 가질 수 있지만, Hashtable는 할 수 없습니다. 또한 Hashtable은 구현면에서 훨씬 더 효율적입니다.

This article on the MSDN Blog에는 HashtableNameValueCollection에 대한 몇 가지 좋은 정보가 있습니다.

은 조회에

  • 2.6 배 더 효율적 ... Hashtable이며, 자신의 연구 결과를 요약합니다.
  • 8.5 배속으로 더 효율적입니다.
  • 제거시 더 효율적입니다.

그들은 NameValueCollection를 사용하는 경우에 대한 몇 가지 유용한 정보와 문서를 마무리 : 당신은 NameValueCollection은을 사용 싶어 할 때

그래서 당신이 궁금 할 것이다. NameValueCollection은 문자열 인 키와 값만 허용하므로 매우 전문적인 컬렉션입니다. 여러 값을 키와 연관 시키거나 해시 기반 조회를 수행하고 색인별로 조회 할 필요가있을 때 (그리고 너무 많은 제거를 수행하지 않은 경우) 유용합니다.

그러나 문자열 기반 키/값 쌍을 저장해야하고 인덱스 기반 조회를 수행하거나 여러 값을 키와 연결할 필요가없는 경우 generic 사전 클래스를 사용하는 것이 좋습니다. 이것은 모든 경우에 Hashtable과 같은 asymptotic 행동을 가지고 있으며, 또한 권투로 인한 모든 비용을 피할 수 있습니다.