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早)?

IPartition在.net Core中做什么?

当集合支持索引时,这是对作用于索引(Take/Skip等)的可枚举方法的优化。IIListProvider是相关的

有一些实现。在文件中搜索IPartition

关于这个有一些问题。

IPartition允许将更高级的操作委托给底层集合。例如,new int[10].Skip(1)很慢,因为所有数据都要经过两个IEnumerable<int>。通过IPartition实现,这实际上变成了for (int i = 1 ... 9) emit(list[i]);。所以它没有使用中间枚举器而是调用列表索引器这比枚举略快。

这是一个非常粗略的描述。我鼓励您查看Github讨论和代码。