【发布时间】:2014-06-23 09:05:36
【问题描述】:
我有一种情况,我有大量项目存储在 HttpApplicationState 中,它在内部使用 NameValueCollection 来存储键值对。大我的意思是数十万个字符串项目。在这种特殊情况下,我还尝试批量删除键(同样,从集合中按键删除大块项目),但我发现这样做非常缓慢。
我写了以下示例进行比较。第一个代码示例使用NameValueCollection 按键删除所有值:
NameValueCollection collection = new NameValueCollection();
// Setup
for (int i = 0; i < 100000; i++)
{
collection.Add(i.ToString(), i.ToString());
}
// Remove
for (int i = 0; i < 100000; i++)
{
collection.Remove(i.ToString());
}
运行它需要很长时间(实际上我放弃了,因为它花费了太长时间)。然后我将它与使用Dictionary<TKey, TValue>的这个版本进行了比较:
Dictionary<int, int> collection = new Dictionary<int, int>();
// Setup
for (int i = 0; i < 100000; i++)
{
collection.Add(i, i);
}
// Remove
for (int i = 0; i < 100000; i++)
{
collection.Remove(i);
}
上面的示例运行得如此之快,它可能是即时的。
那么,为什么在我看来做类似事情的两个不同系列的工作方式却如此不同?
【问题讨论】:
标签: c# performance collections