【问题标题】:Comparing generic list to an array将通用列表与数组进行比较
【发布时间】:2010-09-21 03:15:24
【问题描述】:

为什么 generic.list 比数组慢?

【问题讨论】:

  • 语法?你的问题几乎无法理解。
  • 可能需要让不会说英语的人放松一下。
  • 如果没有人告诉他们什么时候英语特别差,英语怎么会变得更好?
  • 好点,我认为将问题编辑为可读可能最有帮助。
  • 松懈?使用 Y?来吧。

标签: .net arrays list


【解决方案1】:

通用列表比数组稍慢,但在大多数情况下您不会注意到。大多数情况下,它与稍微复杂一点的查找有关:据说 List 使用了“幕后”的数组,但不能保证以与数组相同的方式将节点保留在相邻内存中。

但是,我在 2005 年看到了一些基准测试(现在找不到链接),差异非常很小。

此外,与数组相比,列表具有许多重要优势:主要是添加或删除项目很简单。当您不知道需要多少物品或该数量会发生变化时,使用列表会容易得多。在这些情况下(老实说,这是大部分时间),您可能应该使用数组。

【讨论】:

  • 很好的答案,既然你有足够的分数,也许你可以编辑这个问题。
  • 我不太确定它的原意是什么。是的,我知道这看起来很奇怪,因为我提供了一个答案,但提供一个可能不正确的答案不会像编辑那样破坏问题。
  • 嗯,主数据块(数组)将是连续的 - 但同意:它可能不与 List 实例相邻。
【解决方案2】:

在读取性能方面,有两个因素:

  • 一个额外的取消引用(即List<T> 将包含一个T[] 字段,并且必须取消引用它)
  • 它不能使用 T[] 存在的某些编译器优化 - 例如消除循环期间的边界检查

但是,添加到 List<T> 更容易,特别是因为它保留了备用空间 - 即它不必为了添加单个元素而调整整个数组的大小/blit。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-18
    • 2021-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多