-
Notifications
You must be signed in to change notification settings - Fork 946
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Improve JsonEncoder.EscapeString and fix test warnings for ToString() #2527
Conversation
Codecov ReportAttention:
Additional details and impacted files@@ Coverage Diff @@
## master #2527 +/- ##
==========================================
+ Coverage 53.96% 53.97% +0.01%
==========================================
Files 334 334
Lines 64424 64457 +33
Branches 13239 13244 +5
==========================================
+ Hits 34764 34793 +29
- Misses 25907 25912 +5
+ Partials 3753 3752 -1 ☔ View full report in Codecov by Sentry. |
Tests/Opc.Ua.Core.Tests/Types/Encoders/JsonEncoderBenchmarks.cs
Outdated
Show resolved
Hide resolved
Tests/Opc.Ua.Core.Tests/Types/Encoders/JsonEncoderBenchmarks.cs
Outdated
Show resolved
Hide resolved
Tests/Opc.Ua.Core.Tests/Types/Encoders/JsonEncoderBenchmarks.cs
Outdated
Show resolved
Hide resolved
…and changed .net conditionals supporting Span<T>
Tests/Opc.Ua.Core.Tests/Types/Encoders/JsonEncoderBenchmarks.cs
Outdated
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
please check there is one caveat
addressed the issue |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Proposed changes
Update the function to improve performance.
Fix test code warnings (CA1305) related to ToString() method
Based on the results of the benchmark runs,
EscapeStringLegacyPlus
was picked for all platforms that do not supportStreamWriter.Write(ReadOnlySpan<char>)
, e.g. .NET Framework. There is a slight improvement for the cases which require a 4 digit hex encoding.For platforms that support Span end to end
EscapeStringSpanCharsInline
was picked. The functions tries to optimize how often the underlying StreamWriter is called by combining calls to Write into to slices. It was also noted that up to three character strings, it performs better to do single character writes than calling with a small string.Below the result of the benchmark runs:
Related Issues
Types of changes
What types of changes does your code introduce?
Put an
x
in the boxes that apply. You can also fill these out after creating the PR.Checklist
Put an
x
in the boxes that apply. You can also fill these out after creating the PR. If you're unsure about any of them, don't hesitate to ask. We're here to help! This is simply a reminder of what we are going to look for before merging your code.Further comments
If this is a relatively large or complex change, kick off the discussion by explaining why you chose the solution you did and what alternatives you considered, etc...