【发布时间】:2009-06-29 10:38:17
【问题描述】:
我目前正在实现一个非常复杂的树结构,以允许近乎即时的数据访问,而不是对每个请求进行重新处理。
我只是想知道是否存在理论或实际限制树的大小变得太大,或者字典变得过于冲突填充而无法正确/快速运行的点?
一般的答案将不胜感激,但 C# 特定的信息会更好!
【问题讨论】:
标签: c# dictionary tree size
我目前正在实现一个非常复杂的树结构,以允许近乎即时的数据访问,而不是对每个请求进行重新处理。
我只是想知道是否存在理论或实际限制树的大小变得太大,或者字典变得过于冲突填充而无法正确/快速运行的点?
一般的答案将不胜感激,但 C# 特定的信息会更好!
【问题讨论】:
标签: c# dictionary tree size
在 .NET 中,树或字典中的最大值为 2^31 - 1(可能会减少一些开销)。
实际上,您可能早就用完了内存!
如果树保持平衡,则搜索将保持大约。 O(log N)。
字典对使用的底层算法更敏感,例如有许多具有不同特征的哈希方案。
【讨论】:
取决于你认为的大量。数百或数千应该没问题,但数百万可能值得寻找专门的东西。
随着你的成长,一棵树会变慢,这取决于你的存储技术和重新平衡。
字典应该是相当一致的,但请确保使用适合您可能存储的数据量的大小来构建它(也许 x2 是安全的)。
【讨论】:
见 this question - 这是我在 So 上回答的第一个 :)
问题是构建包含大约 900,000 个项目的字典时性能缓慢。我将时间从 10 多分钟缩短到 0.34 秒。
教训是,字典只和你的散列函数一样好,如果你能快速生成一个唯一的散列,它会像闪电一样运行。
希望这会有所帮助,
编辑:
比较类并不重要,.net 字符串具有非常强大的哈希函数,因此 - 在字典中具有出色的性能。如果他一直使用单个字符串而不是字符串对,那家伙的问题就会“消失”。
【讨论】: