- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我查看了 .NET Core 源代码,以了解在集合实现 IList
时是否优化了对 IEnumerable.Last()
(LINQ) 的调用经过一些快速基准测试后,我怀疑是这种情况。 It turns out that yes, the input is specifically checked for IList
然而,甚至在此之前,它会检查输入是否实现了 IPartition
。 IPartition
is defined here , 但我根本不明白它应该做什么。
IPartition
的目的是什么?它怎么可能比 IList
的通常恒定时间索引更快(或者如果不是,为什么输入检查 IPartition
早于 IList
)?
最佳答案
当集合支持索引时,它是对作用于索引(Take/Skip 等)的可枚举方法的优化。 IIListProvider
是相关的。
有几个implementations .在文件中搜索 IPartition
.
有issues关于这个。
IPartition
允许将更高级别的操作委托(delegate)给基础集合。例如,new int[10].Skip(1)
很慢,因为所有数据都经过两个 IEnumerable<int>
.随着IPartition
这实际上变成了 for (int i = 1 ... 9) emit(list[i]);
的实现.所以它不使用中间枚举器,而是调用比枚举稍快的列表索引器。
这是一个非常粗略的描述。我鼓励您查看 Github 讨论和代码。
关于c# - IPartition 在 .NET Core 中有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39232868/
我查看了 .NET Core 源代码,以了解在集合实现 IList 时是否优化了对 IEnumerable.Last() (LINQ) 的调用经过一些快速基准测试后,我怀疑是这种情况。 It turn
我是一名优秀的程序员,十分优秀!