Improve performance of HtmlWriter and some smaller things #1851
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.
The main optimization is to use String.IndexOf for finding HTML-dangerous characters while doing encoding. Since IndexOf is vectorized, it can be up to an order of magnitude faster than our previous implementation, especially when no characters need escaping.
The LongHtmlString benchmark with many escaped characters goes from 34-40ms to 29-34ms. The LongJsonString with no escaped characters goes from 17-26ms to 1.5-2.5ms.
The full-stack performance sample goes from ~798ms to ~641ms on .NET 8 without PGO. The difference on other platforms is also in the ~ 5-10% range
The benchmark results are in these attachment: main.csv perf-htmlwriter-indexof.csv