-
Notifications
You must be signed in to change notification settings - Fork 5.2k
Description
Proposal
We are hitting limitations with our in-built collections all over the places, either performance based (i.e. allocation) or feature based). After talking with @jkotas offline we agreed that it would be ideal if we would provide commonly used specialized collections (like a Dictionary<string, string> or a PriorityQueue) as a source based nuget package. That would allow us to provide basic enhanced functionality over the general purpose inbox types but still the ability to tweak them on demands.
Considerations:
- What kind of collection types would benefit from specialization?
- Where do we see gaps to our competition (again, performance or feature wise)?
- Where would such a package be hosted and how would it be deployed? (corefx vs community corefx repo)
- Is a source based nuget package feasible and are we easily able to use it inside corefx?
Example
Currently working in Regex to avoid allocation I stumbled upon places where Unicode categories are statically stored in a Dictionary<string, string>. Trying to get the value out of it involves allocation because there is currently no way to pass a ReadOnlySpan as a key in to get the value. Providing a specialized version would allow us to add an additional overload for ReadOnlySpan.
References
Dictionary/List ref api additions: dotnet/coreclr#17405 (comment)
PriorityQueue: https://github.com/dotnet/corefx/issues/574#issuecomment-308491122 & dotnet/corefxlab#1850
OrderedDictionary<,>: https://github.com/dotnet/corefx/issues/26634
cc @jkotas @karelz @benaadams @danmosemsft