Fil*_*erg 1 c# linq generics .net-4.0 c#-4.0
在LINQ结果上你喜欢这样:
var result = from x in Items select x;
List<T> list = result.ToList<T>();
Run Code Online (Sandbox Code Playgroud)
但是,ToList<T>它真的很慢,是否会使列表变得可变,因此转换速度很慢?
在大多数情况下,我可以设法只使用我的IEnumerable或Paralell.DistinctQuery现在,但现在我想将项目绑定到DataGridView,因此我需要作为其他东西IEnumerable,建议如何获得ToList或任何替换的性能?
在10亿的记录中IEnumerable,.ToList<T>大约需要6秒钟.
Meh*_*ari 10
.ToList()比什么慢?
如果你在比较
var result = from x in Items select x;
List<T> list = result.ToList<T>();
Run Code Online (Sandbox Code Playgroud)
至
var result = from x in Items select x;
Run Code Online (Sandbox Code Playgroud)
你应该注意,由于查询被懒惰地评估,第一行根本没有做太多.它不会检索任何记录.延迟执行使得这种比较完全不公平.
这是因为LINQ喜欢懒惰并尽可能少地工作.这一行:
var result = from x in Items select x;
Run Code Online (Sandbox Code Playgroud)
尽管您选择了名称,但实际上并不是结果,它只是一个查询对象.它不会获取任何数据.
List<T> list = result.ToList<T>();
Run Code Online (Sandbox Code Playgroud)
现在您实际上已经请求了结果,因此它必须从源中获取数据并制作它的副本.ToList保证制作副本.
考虑到这一点,第二条线比第一条线慢得多并不奇怪.
| 归档时间: |
|
| 查看次数: |
4482 次 |
| 最近记录: |