c# - IPartition 在 .NET Core 中有什么作用?

标签 c# .net linq .net-core

我查看了 .NET Core 源代码,以了解在集合实现 IList 时是否优化了对 IEnumerable.Last() (LINQ) 的调用经过一些快速基准测试后,我怀疑是这种情况。 It turns out that yes, the input is specifically checked for IList然而,甚至在此之前,它会检查输入是否实现了 IPartitionIPartition 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/

相关文章:

c# - 使用 protobuf-net 生成 C# 时保留 proto 注释

c# - 如何将 Enum int 值传递给 Controller

.net - Linq:Select 和Where 之间有什么区别

c# - 更新多个相同类型的项目

c# - 如何避免 'Object reference not set to an instance of an object' ?

asp.net - 如何为 Elmah 使用 EntityFramework 连接字符串?

c# - 泛型类型 MyType<,> 实际上是一个类型吗?

c# - 表达式转换错误 - 类型之间没有定义强制运算符

c# - 为什么我在从 .net core rc1 迁移到 rc2 时遇到这种不兼容问题

c# - 所有图像效果的颜色矩阵