Further optimize filter expressions #7311
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR is a continuation of the improvements from PR #7005
By introducing a struct and extracting the parameter manually, it's possible to avoid a closure and lambda expression allocation for each filter operator value.
Note:
The added struct has a single property "p". The name is important as this is the same name that EF Core uses for the SQL Server provider by default when parameterizing values from anonymous closures. Changing the name causes SQL Server snapshot tests to fail, since "@__p_0" in the produced SQL would turn into "@__ChangedName_p"
Commit e9b8238 is not related to the perf improvements below, but should speed up the static class initialization a tiny bit
Benchmarks (commit 9b5b9e1)
The HC14 benchmarks represent the changes made in #7005 and what's currently in the main branch