您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

调用ToList()会对性能产生影响吗?

调用ToList()会对性能产生影响吗?

是的,IEnumerable<T>.ToList()确实会对性能产生影响,尽管可能只需要关注性能关键的操作,但它是 O(n) 操作。

ToList()操作将使用List(IEnumerable<T> collection)构造函数。这个构造函数必须复制数组(通常是IEnumerable<T>),否则将来对原始数组的修改T[]也将在源上更改,这通常是不希望的。

我想重申的是,这只会对庞大的列表有所作为,复制内存块是一项非常快速的操作。

您会在LINQ中注意到有几种以As(如AsEnumerable())和To(如ToList())开头的方法。开头的方法To需要进行上述转换(即可能会影响性能),而开头的方法As则不需要,只需要进行一些强制转换或简单操作即可。

List<T>如果您有兴趣,这里有一些更详细的说明:)

AList<T>还使用一种称为动态数组的结构,该结构需要按需调整大小,此调整大小事件将旧数组的内容复制到新数组。因此,它从很小的地方开始,并在需要时增加尺寸

这是的CapacityCount属性间的区别List<T>Capacity指的是幕后数组的大小,Count是其中的项目数List<T>始终为<= Capacity。因此,当将一项添加到列表中时,将其增加到之后Capacity,的大小将List<T>增加一倍,并复制该数组。

其他 2022/1/1 18:14:15 有438人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶