Skip to main content
 首页 » 编程设计

c#之有没有支持字典类型操作的LinkedList集合

2024年01月25日26me-sa

我最近在分析一个应用程序,试图找出为什么某些操作非常慢。我的应用程序中的一个类是基于 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> .