【问题标题】:asp.net custom resourceprovider using Dictionary / SortedList / SortedDictionary?使用 Dictionary / SortedList / SortedDictionary 的 asp.net 自定义资源提供程序?
【发布时间】:2011-08-20 22:56:18
【问题描述】:

这个问题可能已经以不同的格式提出,但是对于我目前的要求,有人可以建议哪个是最好的..

在 ASP.Net 中,我有自己的本地和全局资源实现,我将键值对存储在静态 Dictionary 对象中,总共可能有最多 10,000 个值(所有页面)。当 asp.net 应用程序加载一个页面时,它会将值存储在我的静态字典对象中。当页面被再次访问而不是从资源文件中读取值时,它由静态 Dictionary 对象提供。

我的问题是出于性能原因字典是最好的还是我应该使用 SortedList/SortedDictionary

【问题讨论】:

  • 为什么需要排序?如果您总是通过键访问值,则不会有任何优势,只会降低性能,因为 SortedList 必须在创建、插入和删除时重新排序所有索引。唯一的好处是您可以通过键或索引访问它,并且在枚举 DictionaryEntries 时可以通过键获得正确的排序顺序。
  • 我不需要排序,我的想法是如果记录按排序顺序存储,同时获取单个值会更快。我不确定它内部使用的算法
  • 在 Dictionary 类型中的存储位置无关紧要。它们可以通过密钥直接访问,就像一个地址。留在字典里。如果您想了解更多有关算法的信息,请查看this SO-answer

标签: c# asp.net collections


【解决方案1】:

排序会增加开销,所以如果您不需要排序,只需根据键从字典中查找单个页面,那么我会坚持使用字典。

从您的情况来看,我认为查找速度是最重要的问题。

SortedDictionary 使用红黑树,这是一种在添加/删除项目时保持集合有序的二叉树。因此,如果您正在寻找值的范围,其中集合中一个项目相对于另一个项目的位置很重要,那么 SortedDictionary 是有意义的。如果您可能需要使用索引(如数组)而不是键来访问集合,SortedList 是有意义的。

字典使用散列表来散列和存储用于查找的键,因此它可以非常快速地查找随机的单个项目。这符合您的情况。

SortedDictionary 以 O(log n) 的顺序进行添加/查找,而 Dictionary 以 O(1) 的顺序进行添加/查找。

a comparison of the System.Collections.Generic collections

【讨论】:

  • 排序是在添加/插入/删除时完成的,但是后备存储是一种不同的机制,它适用于不同的操作。我会用详细信息更新我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-19
相关资源
最近更新 更多