开发者社区> 问答> 正文

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

使用时ToList(),是否需要考虑对性能的影响?

我正在编写查询以从目录中检索文件,该查询是:

string[] imageArray = Directory.GetFiles(directory);

但是,由于我想与之合作List<>,所以我决定投入...

List imageList = Directory.GetFiles(directory).ToList();

因此,在决定进行这种转换时,是否应该考虑某种性能影响?或者仅在处理大量文件时才考虑?这是微不足道的转换吗? 问题来源于stack overflow

展开
收起
保持可爱mmm 2020-02-07 01:17:15 420 0
1 条回答
写回答
取消 提交回答
  • IEnumerable.ToList() 是的,IEnumerable .ToList()确实会对性能产生影响,尽管可能只需要关注性能关键的操作,但它是O(n)操作。

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

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

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

    有关的其他详细信息 List List 如果您有兴趣,这里有一些工作原理的详细信息:)

    A List 还使用称为动态数组的结构,该结构需要按需调整大小,此调整大小事件将旧数组的内容复制到新数组。因此,它开始时很小,并在需要时增加大小。

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

    2020-02-07 01:17:28
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
建立联系方法之一 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载