我最近在分析一个应用程序,试图找出为什么某些操作非常慢。我的应用程序中的一个类是基于 LinkedList 的集合。这是一个基本大纲,仅显示了几种方法并删除了一些绒毛:
public class LinkInfoCollection : PropertyNotificationObject, IEnumerable<LinkInfo>
{
private LinkedList<LinkInfo> _items;
public LinkInfoCollection()
{
_items = new LinkedList<LinkInfo>();
}
public void Add(LinkInfo item)
{
_items.AddLast(item);
}
public LinkInfo this[Guid id]
{ get { return _items.SingleOrDefault(i => i.Id == id); } }
}
该集合用于在单个列表中存储超链接(由 LinkInfo 类表示)。但是,每个超链接也有一个指向它的超链接列表,以及一个它指向的超链接列表。基本上,它是网站的导航 map 。因为这意味着当链接彼此返回时可以无限递归,我将其实现为链表 - 据我了解,这意味着对于每个超链接,无论它被另一个超链接引用多少次,都只有对象的一份副本。
上例中的 ID 属性是一个 GUID。
有了冗长的描述,我的问题就很简单了——根据分析器,当为一个相当小的网站构建这个 map 时,上面提到的索引器被调用不少于 27906 次。这是一个非常大的数目。我仍然需要弄清楚是否真的有必要多次调用,但与此同时,我想知道是否有更有效的索引器方法,因为这是分析器识别的主要瓶颈(也假设它没有说谎!)。我仍然需要链表行为,因为我当然不希望这些超链接的多个副本四处漂浮,从而破坏我的内存,但我也确实需要能够通过唯一的 key 访问它们。
有没有人可以提供有关提高此索引器性能的建议。我还有另一个使用 URI 而不是 GUID 的索引器,但这问题不大,因为构建传入/传出链接是由 GUID 完成的。
谢谢; 理查德·莫斯
最佳答案
你应该使用 Dictionary<Guid, LinkInfo>
.
关于c# - 有没有支持字典类型操作的LinkedList集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4187619/