3

为什么 generic.list 比数组慢?

4

2 回答 2

5

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

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

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

于 2008-11-06T17:27:05.320 回答
3

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

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

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

于 2008-11-06T22:01:28.323 回答