c# - 调用 ToList() 时是否会影响性能?

标签 c# arrays performance list

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

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

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

但是,因为我喜欢与 List<> 一起工作相反,我决定加入……

List<string> imageList = Directory.GetFiles(directory).ToList();

那么,在决定进行这样的转换时是否应该考虑某种性能影响 - 或者仅在处理大量文件时才考虑?这是一个可以忽略不计的转换吗?

最佳答案

IEnumerable<T>.ToList()

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

ToList()操作将使用 List(IEnumerable<T> collection) 构造函数。此构造函数必须复制数组(更一般地说是 IEnumerable<T> ),否则将来对原始数组的修改将在源 T[] 上发生变化。这通常也是不可取的。

我想重申这只会对一个巨大的列表产生影响,复制内存块是一个非常快速的操作。

小贴士,As对比To

您会注意到在 LINQ 中有几种以 As 开头的方法(例如 AsEnumerable() )和 To (例如 ToList() )。以To开头的方法需要像上面那样的转换(即可能会影响性能),以及以 As 开头的方法不需要并且只需要一些转换或简单的操作。

有关 List<T> 的其他详细信息

这里有更多关于如何 List<T> 的细节。如果您有兴趣,可以使用:)

A List<T>还使用一个称为动态数组的构造,需要按需调整大小,此调整大小事件将旧数组的内容复制到新数组。所以它从小开始,increases in size if required .

这是 Capacity 之间的区别和 Count List<T> 上的属性. Capacity指的是幕后数组的大小,CountList<T> 中的项目数这总是 <= Capacity .所以当一个项目被添加到列表中时,增加它超过 Capacity , List<T> 的大小加倍并复制数组。

关于c# - 调用 ToList() 时是否会影响性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15516462/

相关文章:

c# - ASP.NET如何用post方法发送数据?

javascript - 将一组选中的复选框的值获取到 JavaScript 数组中,并将它们传递到 ajax 请求中

performance - TSDB 与 HBase : What to choose in long term?

performance - Go http 服务器在请求转发时性能不佳

c# - HTTPClient 返回 HttpRequestException WinRT

C# ASP.Net 5 配置和向后兼容类库

c - 错误: assignment to expression with array type

具有保护条件的 Python 标量积

c++ - 分支感知编程

c# - 将上下文菜单添加到桌面背景