Skip to content

Optimize comparison methods in immutable collections #127279

Description

@aw0lid

Description

While working on PR #126309 for Issue #90986, I noticed that the current implementation of several comparison methods in the System.Collections.Immutable library always creates a new intermediate collection (like HashSet<T> or SortedSet<T>).

The Problem

This intermediate allocation is often unnecessary. For example, if both collections are of the same type (e.g., both are ImmutableSortedSet<T>) and share the same comparer, we can perform the comparison directly without allocating any new memory on the heap.

The Solution

I propose adding a "Fast Path" to detect these cases and perform the check directly. This will:

  • Eliminate unnecessary allocations when types/comparers are compatible.
  • Improve performance by moving from building a fully new collection to a direct linear comparison of existing elements wherever applicable.

Targeted Methods & Progress

I am taking ownership of this optimization and will be submitting focused PRs for each:

Next Steps: I plan to apply the same pattern to:

  • ImmutableSortedSet<T>: IsSubsetOf, IsProperSubsetOf.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions