gpt4 book ai didi

c# - DictionarySectionHandler 和 NameValueSectionHandler 之间有区别吗?

转载 作者:可可西里 更新时间:2023-11-01 09:07:20 26 4
gpt4 key购买 nike

在 .NET 中,我们可以使用 <configSections> 创建自定义配置部分元素,像这样:

<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 .

据我所知,这两个处理程序的使用方式完全相同,并导致相同的配置部分。

那么,它们有区别吗,或者我可以互换使用它们吗?

最佳答案

TL;DR NameValueSectionHandler 在简单情况下适用于 string->string 对,但如果您需要您的配置高效(特别是如果您要重复使用 remove),请使用 DictionarySectionHandler


我深入研究了这两个类( NameValueDictionary )的源代码,发现实现上的差异很小。

不过有两点值得注意:

  1. 正如处理程序的名称所暗示的那样,主要区别在于它们使用的集合:DictionarySectionHandler 将其键/值对存储在 Hashtable 中。 ,而 NameValueSectionHandler 使用 NameValueCollection .
  2. DictionarySectionHandler 中,value 不是必需的,如果未提供则默认为空字符串,但 NameValueSectionHandler 需要

HashtableNameValueCollection的区别而言,NameValueCollection可以有重复键,而Hashtable不能.此外,Hashtable 的实现效率要高得多。

This article on the MSDN Blog有一些关于 HashtableNameValueCollection 的有用信息。

总结他们的发现,Hashtable 是......

  • 查找效率提高 2.6 倍。
  • 添加效率提高 8.5 倍。
  • 删除效率提高了一个数量级。

他们用一些关于何时使用 NameValueCollection 的有用信息来总结文章:

So you may be wondering when you’d want to use NameValueCollection. NameValueCollection only accepts keys and values that are Strings, so this is a very specialized collection. It’s useful in a situation in which you either need to associate multiple values with a key, or to do hash-based lookups as well as lookup by index (and hopefully not perform too many removes).

However, if you need to store string key/value pairs and you don’t need to perform index-based lookups or associate multiple values with a key, you may prefer to use the generic Dictionary class. This has the same asymptotic behavior as Hashtable in all cases and furthermore avoids any costs due to boxing.

关于c# - DictionarySectionHandler 和 NameValueSectionHandler 之间有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26281974/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com