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

标签 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); } }

  }

该集合用于在单个列表中存储超链接(由 LinkInfo 类表示)。但是,每个超链接也有一个指向它的超链接列表,以及一个它指向的超链接列表。基本上,它是网站的导航 map 。因为这意味着当链接彼此返回时可以无限递归,我将其实现为链表 - 据我了解,这意味着对于每个超链接,无论它被另一个超链接引用多少次,都只有对象的一份副本。

上例中的 ID 属性是一个 GUID。

有了冗长的描述,我的问题就很简单了——根据分析器,当为一个相当小的网站构建这个 map 时,上面提到的索引器被调用不少于 27906 次。这是一个非常大的数目。我仍然需要弄清楚是否真的有必要多次调用,但与此同时,我想知道是否有更有效的索引器方法,因为这是分析器识别的主要瓶颈(也假设它没有说谎!)。我仍然需要链表行为,因为我当然不希望这些超链接的多个副本四处漂浮,从而破坏我的内存,但我也确实需要能够通过唯一的 key 访问它们。

有没有人可以提供有关提高此索引器性能的建议。我还有另一个使用 URI 而不是 GUID 的索引器,但这问题不大,因为构建传入/传出链接是由 GUID 完成的。

谢谢; 理查德·莫斯

最佳答案

你应该使用 Dictionary<Guid, LinkInfo> .

关于c# - 有没有支持字典类型操作的LinkedList集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4187619/

相关文章:

c# - 委托(delegate)与事件

scala - 具有可变泛型的元素映射

c++ - 无法将节点附加到链表 C++

c - 根据您的索引从 C 中的链表中删除

c# - 仅传递字符串数组时,为什么编译器会因为非常量表达式而报错

c# - 带有谷歌日历的通用 Windows 平台应用程序

python - 长格式 Pandas 数据框到字典

C程序: How to copy linked list to dynamic array?

c# - 在 Mono 上运行 ASP.NET 5 的 Ubuntu 上使用 MVC 6 调整图像大小

python - 通过类属性访问的字典列表