【发布时间】:2014-04-28 02:53:48
【问题描述】:
我需要在 ASP.NET MVC 应用程序中缓存大量数据库中的数据,并希望使用 SortedList。我知道 .NET 4.0 添加了并发集合,但没有排序集合。 我正在考虑使用 SynchronizedCollection,但它甚至在读取时也大量使用锁(如果我没记错的话),所以我正在寻找其他选项。基本上我需要一个具有 O(log n) 访问复杂度的并发集合。
编辑 - 基于 Greg 答案的代码
void WrappedAdd(TKey k, TValue v)
{
var copy = new SortedList<TKey, TValue>(_sortedList);
copy.Add(k, v);
_sortedList = copy;
}
【问题讨论】:
-
@HenkHolterman 我需要对集合进行排序。由于它会很大,我想避免 OrderByDesc 调用......
-
您会退回整个收藏吗?单个项目不需要排序。一个 LINQ 哪里会是 O(n)。
-
@Blam 实际上我会将它用作集合(例如获取最近的记录)以及单项获取。这就是为什么我需要对它进行排序。对其进行排序将允许我使用二进制搜索,同时它将是一个集合/列表......
-
顺便问一下,你希望有多少读者和作者?
-
不,这不一样。不可变集合的关键在于它们使用结构共享。这意味着对它们的操作不会返回全新的集合,而是新版本与旧版本共享大部分结构,因此只需要很少的重新分配。
SortedList不能这样工作。你在那里做的是一个接一个地复制集合中的每个元素。这是一个非常昂贵的O(n)操作。
标签: c# .net asp.net-mvc caching