【问题标题】:Best performance on a String Dictionary in C#C# 中字符串字典的最佳性能
【发布时间】:2011-09-27 20:25:39
【问题描述】:

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

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

我可以采取其他方法来确保更好的性能速度吗?

【问题讨论】:

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

标签: c# performance dictionary hashtable idictionary


【解决方案1】:

Dictionary<K,V> 中检索值非常快(接近 O(1),即无论集合大小如何,几乎都是恒定的时间查找),因为底层实现使用哈希表。当然,如果key 类型使用了糟糕的哈希算法,性能可能会下降,但您可以放心,框架的string 类型可能不是这种情况。

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

  1. 定义最重要的性能指标,即时间(CPU)或空间(内存)。
  2. 您有什么要求?这将如何使用?你最坏的情况是什么?这是否会保存大量不经常查找的数据,是否需要在短时间内执行许多查找,还是两者都成立?

Dictionary<K,V> 类还在内部使用了一个数组,该数组会随着您添加项目而增长。这对你好吗?同样,您需要更具体地说明您的要求,然后才能有人给您完整的答案。

【讨论】:

    【解决方案2】:

    使用字典会比使用直接引用慢,因为字典必须计算哈希等。如果你真的只需要父而不是子的操作(我怀疑),那么你可以将字符串存储在一个数组以及父字符串的索引。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-21
      • 2011-02-14
      • 1970-01-01
      • 1970-01-01
      • 2021-12-14
      • 1970-01-01
      • 2015-10-12
      • 1970-01-01
      相关资源
      最近更新 更多