Avoid using Linq as it generates GC each time. #296
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.
I was doing some performance comparisons between our old version (2.x) and after upgrading to the latest version.
Previous formatting of a simple string such as "Hello {0} world {1}. This is a {0} test." would generate 0.6KB of garbage each run(after warmup).
When running with the latest version it was 2.6KB.
I found that most of this was coming from Source.cs
HasNullableOperator
. Its uses Linq which generates GC each time. So I have removed the usage of Linq in some of the critical parts. The GC is now down to around 0.5KB for us.I also made the Source.cs method
TryEvaluateSelector
abstract as it seemed to make more sense.