C# C语言中字符串字典的最佳性能#

C# C语言中字符串字典的最佳性能#,c#,performance,dictionary,hashtable,idictionary,C#,Performance,Dictionary,Hashtable,Idictionary,我正在设计一个包含字符串层次结构的C#类,其中每个字符串都有0或1个父级 我倾向于使用字典来实现这一点,其中键是子项,值是父项。这本字典可能有大量的值,但我不能说出确切的大小。这看起来应该比创建引用父对象的复合包装器执行得更快,但我可能错了 我是否可以采取其他方法来确保更好的性能和速度 从字典中检索值的速度非常快(接近O(1),即几乎是恒定时间的查找,而不管集合的大小),因为底层实现使用哈希表。当然,如果键类型使用了糟糕的散列算法,那么性能可能会降低,但您可以放心,框架的字符串类型可能不是这样

我正在设计一个包含字符串层次结构的C#类,其中每个字符串都有0或1个父级

我倾向于使用
字典来实现这一点,其中键是子项,值是父项。这本字典可能有大量的值,但我不能说出确切的大小。这看起来应该比创建引用父对象的复合包装器执行得更快,但我可能错了


我是否可以采取其他方法来确保更好的性能和速度

字典
中检索值的速度非常快(接近O(1),即几乎是恒定时间的查找,而不管集合的大小),因为底层实现使用哈希表。当然,如果
类型使用了糟糕的散列算法,那么性能可能会降低,但您可以放心,框架的
字符串
类型可能不是这样

但是,正如我在评论中所问,您需要回答几个问题:

  • 定义最重要的性能指标,即时间(CPU)或空间(内存)
  • 你的要求是什么?这将如何使用?你最坏的情况是什么?这将保存大量的数据,但查找频率相对较低,是需要在短时间内执行许多查找,还是两者都适用

  • Dictionary
    类还在内部使用一个数组,该数组将随着您添加项而增长。这对你合适吗?同样,在任何人都能给你一个完整的答案之前,你需要更具体地说明你的要求。

    使用字典将比使用直接引用慢,因为字典将不得不计算哈希等。如果你真的只需要父操作,而不需要子操作(我怀疑),然后可以将字符串与父字符串的索引一起存储在数组中

    “更好的表现”在哪些方面?时间,空间?你的要求是什么?这将如何使用?你最坏的情况是什么?在任何人都能帮助你之前,你需要回答这些问题。如果你以这种方式实施,你如何为给定的父母获得孩子?@eds,时间绩效。我更新了问题;这是一个很好的问题。首先(IMO),您需要对硬件的工作原理有一个基本的了解。接下来,您需要能够确定瓶颈在哪里。这就是你优化的地方。花时间优化不是瓶颈的代码部分是没有意义的,它将在5年的执行过程中为您节省1秒的执行时间。像许多事情一样,这个问题没有简单、简短的答案。这需要时间和经验,以及对幕后工作(尤其是数据结构)的理解;继续学习!随着时间的推移,只要继续学习基本概念,因为它们非常重要。在遇到性能问题之前,高层次、抽象化的东西都是很好的。然后,您需要知识和经验来看穿抽象层,并了解代码为何表现不佳的原因。还要记住,一个好的剖析者是你最好的朋友。