是否有支持字典类型操作的LinkedList集合

Ric*_*oss 1 c# dictionary linked-list

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

  }
Run Code Online (Sandbox Code Playgroud)

该集合用于在单个列表中存储超链接(由LinkInfo类表示).但是,每个超链接还有一个指向它的超链接列表,以及它指向的超链接列表.基本上,它是一个网站的导航地图.因为这意味着当链接回到彼此时你可以进行无限递归,我将它实现为一个链表 - 据我所知,它意味着每个超链接,无论多少次被另一个超链接引用,只有永远只有一个对象的副本.

上例中的ID属性是GUID.

随着冗长的描述,我的问题很简单 - 根据分析器,当为一个相当小的网站构建这个地图时,上面提到的索引器被称为不少于27906次.这是一笔非凡的金额.如果真的有必要多次调用,我仍然需要解决,但同时,我想知道是否有更有效的方法来执行索引器,因为这是分析器识别的主要瓶颈(同样假设它没有说谎!).我仍然需要链表行为,因为我当然不希望这些超链接的多个副本浮动在我的内存周围,但我也需要能够通过一个唯一的密钥访问它们.

有没有人有任何关于提高这个索引器性能的建议.我还有另一个使用URI而不是GUID的索引器,但由于构建传入/传出链接是由GUID完成的,因此问题较小.

谢谢; 理查德莫斯

SLa*_*aks 5

你应该用一个Dictionary<Guid, LinkInfo>.