【发布时间】:2011-02-14 05:52:00
【问题描述】:
我正在使用字典来存储数据,并将缓存它。我想避免服务器内存问题,并通过限制 Dictionary 的大小(无论是大小还是条目数)来获得良好的性能。
这样做的最佳方法是什么?除了字典,我还应该考虑其他课程吗?
【问题讨论】:
标签: c# asp.net dictionary
我正在使用字典来存储数据,并将缓存它。我想避免服务器内存问题,并通过限制 Dictionary 的大小(无论是大小还是条目数)来获得良好的性能。
这样做的最佳方法是什么?除了字典,我还应该考虑其他课程吗?
【问题讨论】:
标签: c# asp.net dictionary
您无需限制字典的大小即可获得良好的性能。
正如文档所说:
使用其键检索值是 非常快,接近 O(1)
【讨论】:
您还可以选择其他几个类,例如
您可以通过查看 System.Collections.Generic 命名空间来查看选项。
他们是一篇非常好的帖子,描述了 MSDN 上所有大多数集合类的优缺点
如果您对这些课程提供的内容不满意,您可以选择自己的收藏课程或自行设计custom Dictionary。
您将需要从 IDictionary 接口和其他类/接口继承您的自定义字典,或者可以从头开始编写。
这是 Dictionary class 在 MSDN 上的签名
[SerializableAttribute]
[ComVisibleAttribute(false)]
public class Dictionary<TKey, TValue> : IDictionary<TKey, TValue>,
ICollection<KeyValuePair<TKey, TValue>>,
IEnumerable<KeyValuePair<TKey, TValue>>,
IDictionary, ICollection, IEnumerable,
ISerializable, IDeserializationCallback
【讨论】:
overright 它的增长规则与您喜欢的那些?
您需要创建自己的继承自 Dictionary 类的类。覆盖 Add 并设置 Item 方法以限制添加对象时的条目数。
【讨论】:
“没有过期策略的缓存只是内存泄漏。”
(抱歉,不知道是谁先说的。)
【讨论】:
要记住的一点是,当您初始化 Dictionary 时,您可以设置初始容量。如果您知道您的列表有多大,请将其设置为正确的大小,您将不会有任何“浪费”的空间。如果您不指定容量,它将设置默认的起始容量并根据需要调整大小/增长,这会影响性能。
【讨论】: