IPartition在.net Core中做什么?
本文关键字:什么 Core net IPartition | 更新日期: 2023-09-27 18:04:51
我看了一下。net Core源代码,以便找出当集合实现IList
时,对IEnumerable.Last()
(LINQ)的调用是否得到了优化,经过一些快速基准测试后,我怀疑是这样。结果是:是的,输入是专门检查IList
的,但在此之前,检查输入是否实现了IPartition
。这里定义了IPartition
,但我完全不理解它应该做什么。
IPartition
的目的是什么,它如何可能比IList
的通常恒定时间索引更快(或者如果不是,为什么IPartition
的输入检查比IList
早)?
当集合支持索引时,这是对作用于索引(Take/Skip等)的可枚举方法的优化。IIListProvider
是相关的
有一些实现。在文件中搜索IPartition
关于这个有一些问题。
IPartition
允许将更高级的操作委托给底层集合。例如,new int[10].Skip(1)
很慢,因为所有数据都要经过两个IEnumerable<int>
。通过IPartition
实现,这实际上变成了for (int i = 1 ... 9) emit(list[i]);
。所以它没有使用中间枚举器而是调用列表索引器这比枚举略快。
这是一个非常粗略的描述。我鼓励您查看Github讨论和代码。