Fix Enumerable.Chunk throughput regression (#72811)
authorStephen Toub <stoub@microsoft.com>
Wed, 27 Jul 2022 01:00:36 +0000 (21:00 -0400)
committerGitHub <noreply@github.com>
Wed, 27 Jul 2022 01:00:36 +0000 (21:00 -0400)
commit1f989749fbaf196ef966a73cc86bebe2be13fad3
tree2f1eb356194f17137667da995f855337faf125ce
parent3c25f598599c6a204f1bece18cb87e8889ed7cfe
Fix Enumerable.Chunk throughput regression (#72811)

* Fix Enumerable.Chunk throughput regression

We previously changed the implementation of Enumerable.Chunk to avoid significantly overallocating in the case of the chunk size being a lot larger than the actual number of elements.  We instead switched to a doubling scheme ala `List<T>`, and I pushed for us to just use `List<T>` to keep things simple.  However, in doing some perf measurements I noticed that for common cases Chunk is now around 20% slower in throughput than it was previously, which is a bit too much too swallow, and the code that just uses an array directly isn't all that much more complicated; it also affords the ability to avoid further overallocation when doubling the size of the storage, which should ideally be capped at the chunk size.  This does so and fixes the throughput regression.

* Address PR feedback
src/libraries/System.Linq/src/System/Linq/Chunk.cs