OPCFoundation / UA-.NETStandard

OPC Unified Architecture .NET Standard
Other
1.94k stars 943 forks source link

Improve JsonEncoder.EscapeString and fix test warnings for ToString() #2527

Closed bhnaphade closed 7 months ago

bhnaphade commented 7 months ago

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 support StreamWriter.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:

Method Runtime StringVariantIndex Mean Error StdDev Median Ratio RatioSD Gen0 Code Size Allocated Alloc Ratio
EscapeStringLegacy .NET 6.0 1 30.694 us 2.8527 us 8.4114 us 28.670 us 1.49 0.26 - NA - NA
EscapeStringLegacyPlus .NET 6.0 1 18.108 us 0.1790 us 0.1494 us 18.061 us 0.63 0.01 - NA - NA
EscapeStringStringBuilder .NET 6.0 1 23.070 us 0.5596 us 1.5784 us 22.945 us 0.81 0.06 3.9368 NA 24800 B NA
EscapeStringThreadLocal .NET 6.0 1 19.527 us 0.2157 us 0.1684 us 19.503 us 0.69 0.01 - NA - NA
EscapeStringSpan .NET 6.0 1 12.937 us 0.2517 us 0.3768 us 12.873 us 0.45 0.01 - 981 B - NA
EscapeStringSpanChars .NET 6.0 1 12.590 us 0.2308 us 0.4502 us 12.539 us 0.44 0.02 - 1,060 B - NA
EscapeStringSpanCharsInline .NET 6.0 1 12.452 us 0.2335 us 0.5026 us 12.266 us 0.45 0.02 - 1,147 B - NA
EscapeStringSpanIndex .NET 6.0 1 14.456 us 0.1996 us 0.1770 us 14.491 us 0.51 0.01 - 974 B - NA
EscapeStringSpanDict .NET 6.0 1 17.173 us 0.3395 us 0.7380 us 16.894 us 0.60 0.01 - 948 B - NA
EscapeStringLegacy .NET 8.0 1 14.124 us 0.2760 us 0.2305 us 14.037 us 0.50 0.01 - NA - NA
EscapeStringLegacyPlus .NET 8.0 1 13.677 us 0.0997 us 0.0778 us 13.687 us 0.48 0.01 - NA - NA
EscapeStringStringBuilder .NET 8.0 1 15.179 us 0.2786 us 0.2736 us 15.136 us 0.53 0.01 3.9368 2,625 B 24800 B NA
EscapeStringThreadLocal .NET 8.0 1 14.264 us 0.2589 us 0.2422 us 14.240 us 0.50 0.01 - 4,963 B - NA
EscapeStringSpan .NET 8.0 1 11.151 us 0.1123 us 0.1050 us 11.173 us 0.39 0.01 - 2,017 B - NA
EscapeStringSpanChars .NET 8.0 1 11.033 us 0.1384 us 0.1227 us 11.040 us 0.39 0.01 - 2,090 B - NA
EscapeStringSpanCharsInline .NET 8.0 1 10.801 us 0.0597 us 0.0559 us 10.814 us 0.38 0.00 - 2,173 B - NA
EscapeStringSpanIndex .NET 8.0 1 12.918 us 0.0765 us 0.0716 us 12.896 us 0.45 0.01 - 2,022 B - NA
EscapeStringSpanDict .NET 8.0 1 12.162 us 0.2009 us 0.1678 us 12.088 us 0.43 0.01 - 1,935 B - NA
EscapeStringLegacy .NET Framework 4.8 1 28.544 us 0.3296 us 0.3083 us 28.523 us 1.00 0.00 - NA - NA
EscapeStringLegacyPlus .NET Framework 4.8 1 22.769 us 0.2852 us 0.2667 us 22.755 us 0.80 0.01 - NA - NA
EscapeStringStringBuilder .NET Framework 4.8 1 32.627 us 0.4395 us 0.7812 us 32.464 us 1.15 0.03 5.8594 NA 36909 B NA
EscapeStringThreadLocal .NET Framework 4.8 1 31.215 us 0.5981 us 0.5595 us 31.165 us 1.09 0.02 1.8921 NA 12036 B NA
EscapeStringSpan .NET Framework 4.8 1 17.775 us 0.2678 us 0.2374 us 17.754 us 0.62 0.01 - 862 B - NA
EscapeStringSpanChars .NET Framework 4.8 1 17.982 us 0.3434 us 0.4088 us 17.757 us 0.63 0.01 - 1,001 B - NA
EscapeStringSpanCharsInline .NET Framework 4.8 1 18.336 us 0.1970 us 0.1843 us 18.289 us 0.64 0.01 - 1,282 B - NA
EscapeStringSpanIndex .NET Framework 4.8 1 20.393 us 0.4045 us 0.7597 us 20.383 us 0.71 0.03 - 850 B - NA
EscapeStringSpanDict .NET Framework 4.8 1 29.775 us 0.5785 us 0.9342 us 29.698 us 1.05 0.03 - 809 B - NA
EscapeStringLegacy .NET 6.0 2 6.473 us 0.0941 us 0.0880 us 6.471 us 0.70 0.01 - NA - NA
EscapeStringLegacyPlus .NET 6.0 2 6.746 us 0.1064 us 0.0995 us 6.728 us 0.73 0.01 - NA - NA
EscapeStringStringBuilder .NET 6.0 2 9.109 us 0.1819 us 0.3185 us 8.958 us 1.01 0.03 2.0294 NA 12800 B NA
EscapeStringThreadLocal .NET 6.0 2 9.287 us 0.0477 us 0.0446 us 9.274 us 1.00 0.01 - NA - NA
EscapeStringSpan .NET 6.0 2 7.522 us 0.0723 us 0.0604 us 7.526 us 0.81 0.01 - 981 B - NA
EscapeStringSpanChars .NET 6.0 2 6.882 us 0.0358 us 0.0335 us 6.883 us 0.74 0.01 - 1,060 B - NA
EscapeStringSpanCharsInline .NET 6.0 2 6.875 us 0.0527 us 0.0493 us 6.867 us 0.74 0.01 - 1,147 B - NA
EscapeStringSpanIndex .NET 6.0 2 8.866 us 0.1318 us 0.1168 us 8.877 us 0.95 0.01 - 974 B - NA
EscapeStringSpanDict .NET 6.0 2 9.174 us 0.0876 us 0.0731 us 9.152 us 0.99 0.01 - 948 B - NA
EscapeStringLegacy .NET 8.0 2 4.134 us 0.0636 us 0.0595 us 4.138 us 0.44 0.01 - NA - NA
EscapeStringLegacyPlus .NET 8.0 2 4.081 us 0.0228 us 0.0202 us 4.082 us 0.44 0.00 - NA - NA
EscapeStringStringBuilder .NET 8.0 2 5.837 us 0.0328 us 0.0307 us 5.834 us 0.63 0.01 2.0370 2,672 B 12800 B NA
EscapeStringThreadLocal .NET 8.0 2 5.626 us 0.0451 us 0.0422 us 5.632 us 0.60 0.01 - 4,944 B - NA
EscapeStringSpan .NET 8.0 2 7.059 us 0.0809 us 0.0756 us 7.055 us 0.76 0.01 - 1,996 B - NA
EscapeStringSpanChars .NET 8.0 2 5.665 us 0.0513 us 0.0455 us 5.641 us 0.61 0.01 - 2,370 B - NA
EscapeStringSpanCharsInline .NET 8.0 2 4.499 us 0.0387 us 0.0343 us 4.502 us 0.48 0.01 - 2,785 B - NA
EscapeStringSpanIndex .NET 8.0 2 8.583 us 0.0962 us 0.0900 us 8.580 us 0.92 0.01 - 2,043 B - NA
EscapeStringSpanDict .NET 8.0 2 7.825 us 0.0840 us 0.0786 us 7.827 us 0.84 0.01 - 1,881 B - NA
EscapeStringLegacy .NET Framework 4.8 2 9.303 us 0.0770 us 0.0721 us 9.296 us 1.00 0.00 - NA - NA
EscapeStringLegacyPlus .NET Framework 4.8 2 9.115 us 0.1187 us 0.1110 us 9.086 us 0.98 0.01 - NA - NA
EscapeStringStringBuilder .NET Framework 4.8 2 18.734 us 0.2775 us 0.2596 us 18.789 us 2.01 0.03 3.1738 NA 20059 B NA
EscapeStringThreadLocal .NET Framework 4.8 2 19.111 us 0.3295 us 0.2752 us 19.110 us 2.05 0.04 1.1292 NA 7221 B NA
EscapeStringSpan .NET Framework 4.8 2 18.813 us 0.2143 us 0.2005 us 18.798 us 2.02 0.02 3.5706 862 B 22466 B NA
EscapeStringSpanChars .NET Framework 4.8 2 18.051 us 0.1812 us 0.1607 us 18.025 us 1.94 0.02 3.5706 1,001 B 22466 B NA
EscapeStringSpanCharsInline .NET Framework 4.8 2 11.918 us 0.1058 us 0.0990 us 11.907 us 1.28 0.02 - 1,282 B - NA
EscapeStringSpanIndex .NET Framework 4.8 2 22.092 us 0.1125 us 0.0940 us 22.064 us 2.37 0.02 3.5706 850 B 22466 B NA
EscapeStringSpanDict .NET Framework 4.8 2 26.105 us 0.1521 us 0.1348 us 26.099 us 2.81 0.03 3.5706 809 B 22466 B NA
EscapeStringLegacy .NET 6.0 3 9.688 us 0.0810 us 0.0758 us 9.687 us 0.65 0.01 - NA - NA
EscapeStringLegacyPlus .NET 6.0 3 9.668 us 0.0628 us 0.0587 us 9.673 us 0.65 0.01 - NA - NA
EscapeStringStringBuilder .NET 6.0 3 13.038 us 0.1104 us 0.1033 us 13.007 us 0.88 0.01 2.6703 NA 16800 B NA
EscapeStringThreadLocal .NET 6.0 3 12.573 us 0.0765 us 0.0716 us 12.549 us 0.85 0.01 - NA - NA
EscapeStringSpan .NET 6.0 3 11.622 us 0.2083 us 0.3181 us 11.497 us 0.79 0.02 - 981 B - NA
EscapeStringSpanChars .NET 6.0 3 10.732 us 0.1334 us 0.1248 us 10.711 us 0.72 0.01 - 1,060 B - NA
EscapeStringSpanCharsInline .NET 6.0 3 11.019 us 0.0923 us 0.0863 us 11.016 us 0.74 0.01 - 1,147 B - NA
EscapeStringSpanIndex .NET 6.0 3 13.471 us 0.1645 us 0.1458 us 13.435 us 0.91 0.01 - 974 B - NA
EscapeStringSpanDict .NET 6.0 3 12.923 us 0.1347 us 0.1125 us 12.947 us 0.87 0.01 - 948 B - NA
EscapeStringLegacy .NET 8.0 3 6.365 us 0.0791 us 0.0618 us 6.356 us 0.43 0.00 - NA - NA
EscapeStringLegacyPlus .NET 8.0 3 6.377 us 0.0643 us 0.0602 us 6.384 us 0.43 0.00 - NA - NA
EscapeStringStringBuilder .NET 8.0 3 8.721 us 0.1692 us 0.2316 us 8.703 us 0.59 0.02 2.6703 2,669 B 16800 B NA
EscapeStringThreadLocal .NET 8.0 3 8.113 us 0.0503 us 0.0446 us 8.118 us 0.55 0.00 - 4,890 B - NA
EscapeStringSpan .NET 8.0 3 9.852 us 0.1817 us 0.2020 us 9.824 us 0.67 0.02 - 1,988 B - NA
EscapeStringSpanChars .NET 8.0 3 8.122 us 0.0768 us 0.0681 us 8.134 us 0.55 0.01 - 2,372 B - NA
EscapeStringSpanCharsInline .NET 8.0 3 7.395 us 0.0527 us 0.0467 us 7.385 us 0.50 0.00 - 2,800 B - NA
EscapeStringSpanIndex .NET 8.0 3 13.117 us 0.2016 us 0.1683 us 13.039 us 0.88 0.01 - 2,026 B - NA
EscapeStringSpanDict .NET 8.0 3 11.278 us 0.0832 us 0.0738 us 11.270 us 0.76 0.01 - 1,937 B - NA
EscapeStringLegacy .NET Framework 4.8 3 14.835 us 0.1057 us 0.0989 us 14.818 us 1.00 0.00 - NA - NA
EscapeStringLegacyPlus .NET Framework 4.8 3 13.965 us 0.2771 us 0.6478 us 13.677 us 1.00 0.05 - NA - NA
EscapeStringStringBuilder .NET Framework 4.8 3 26.077 us 0.4460 us 0.5799 us 25.903 us 1.78 0.04 4.0588 NA 25675 B NA
EscapeStringThreadLocal .NET Framework 4.8 3 24.700 us 0.2340 us 0.1954 us 24.685 us 1.66 0.02 1.3733 NA 8826 B NA
EscapeStringSpan .NET Framework 4.8 3 24.337 us 0.6957 us 1.9279 us 23.783 us 1.66 0.11 4.0588 862 B 25675 B NA
EscapeStringSpanChars .NET Framework 4.8 3 30.089 us 1.7662 us 5.1798 us 28.975 us 1.95 0.12 4.0588 1,001 B 25675 B NA
EscapeStringSpanCharsInline .NET Framework 4.8 3 19.055 us 0.2168 us 0.2028 us 19.011 us 1.28 0.02 - 1,282 B - NA
EscapeStringSpanIndex .NET Framework 4.8 3 27.865 us 0.2522 us 0.2236 us 27.799 us 1.88 0.02 4.0588 850 B 25675 B NA
EscapeStringSpanDict .NET Framework 4.8 3 32.582 us 0.5895 us 0.4603 us 32.541 us 2.19 0.04 4.0283 809 B 25676 B NA
EscapeStringLegacy .NET 6.0 4 12.776 us 0.2190 us 0.2769 us 12.684 us 0.65 0.01 - NA - NA
EscapeStringLegacyPlus .NET 6.0 4 13.640 us 0.2727 us 0.7279 us 13.381 us 0.69 0.04 - NA - NA
EscapeStringStringBuilder .NET 6.0 4 18.108 us 0.2900 us 0.3340 us 18.015 us 0.92 0.02 3.1738 NA 20000 B NA
EscapeStringThreadLocal .NET 6.0 4 17.818 us 0.1009 us 0.0894 us 17.789 us 0.90 0.01 - NA - NA
EscapeStringSpan .NET 6.0 4 14.168 us 0.2695 us 0.6027 us 13.899 us 0.71 0.03 - 981 B - NA
EscapeStringSpanChars .NET 6.0 4 13.472 us 0.2570 us 0.2404 us 13.354 us 0.68 0.02 - 1,060 B - NA
EscapeStringSpanCharsInline .NET 6.0 4 13.113 us 0.1601 us 0.1419 us 13.068 us 0.66 0.01 - 1,147 B - NA
EscapeStringSpanIndex .NET 6.0 4 16.446 us 0.1496 us 0.1249 us 16.460 us 0.83 0.01 - 974 B - NA
EscapeStringSpanDict .NET 6.0 4 18.494 us 0.2155 us 0.1800 us 18.515 us 0.93 0.02 - 948 B - NA
EscapeStringLegacy .NET 8.0 4 8.768 us 0.1500 us 0.1403 us 8.719 us 0.44 0.01 - NA - NA
EscapeStringLegacyPlus .NET 8.0 4 8.633 us 0.0685 us 0.0572 us 8.627 us 0.44 0.00 - NA - NA
EscapeStringStringBuilder .NET 8.0 4 11.283 us 0.1446 us 0.1282 us 11.267 us 0.57 0.01 3.1738 2,662 B 20000 B NA
EscapeStringThreadLocal .NET 8.0 4 10.227 us 0.0734 us 0.0651 us 10.213 us 0.52 0.01 - 4,955 B - NA
EscapeStringSpan .NET 8.0 4 11.913 us 0.0788 us 0.0698 us 11.907 us 0.60 0.01 - 1,988 B - NA
EscapeStringSpanChars .NET 8.0 4 11.012 us 0.0971 us 0.0908 us 10.978 us 0.55 0.01 - 2,370 B - NA
EscapeStringSpanCharsInline .NET 8.0 4 10.711 us 0.0726 us 0.0679 us 10.699 us 0.54 0.01 - 2,486 B - NA
EscapeStringSpanIndex .NET 8.0 4 14.643 us 0.1712 us 0.1602 us 14.591 us 0.74 0.01 - 1,959 B - NA
EscapeStringSpanDict .NET 8.0 4 13.523 us 0.2417 us 0.2142 us 13.481 us 0.68 0.01 - 1,937 B - NA
EscapeStringLegacy .NET Framework 4.8 4 19.833 us 0.2394 us 0.1869 us 19.821 us 1.00 0.00 - NA - NA
EscapeStringLegacyPlus .NET Framework 4.8 4 18.551 us 0.3387 us 0.7782 us 18.280 us 0.96 0.04 - NA - NA
EscapeStringStringBuilder .NET Framework 4.8 4 32.805 us 0.6561 us 1.6095 us 32.551 us 1.70 0.07 4.8218 NA 30490 B NA
EscapeStringThreadLocal .NET Framework 4.8 4 31.618 us 0.6933 us 2.0224 us 31.026 us 1.66 0.07 1.6479 NA 10431 B NA
EscapeStringSpan .NET Framework 4.8 4 25.691 us 0.4011 us 0.5623 us 25.573 us 1.31 0.04 4.0588 862 B 25675 B NA
EscapeStringSpanChars .NET Framework 4.8 4 32.998 us 1.4976 us 4.4156 us 34.366 us 1.43 0.21 4.0588 1,001 B 25675 B NA
EscapeStringSpanCharsInline .NET Framework 4.8 4 35.929 us 0.7115 us 1.2646 us 35.613 us 1.87 0.05 4.0283 1,282 B 25676 B NA
EscapeStringSpanIndex .NET Framework 4.8 4 35.884 us 0.7080 us 0.6954 us 36.010 us 1.80 0.05 4.0283 850 B 25676 B NA
EscapeStringSpanDict .NET Framework 4.8 4 37.408 us 0.3959 us 0.3306 us 37.414 us 1.88 0.02 4.0283 809 B 25676 B NA
EscapeStringLegacy .NET 6.0 5 18.538 us 0.3642 us 0.3041 us 18.429 us 0.60 0.02 - NA - NA
EscapeStringLegacyPlus .NET 6.0 5 19.376 us 0.1833 us 0.2037 us 19.310 us 0.63 0.02 - NA - NA
EscapeStringStringBuilder .NET 6.0 5 31.874 us 0.6244 us 0.5214 us 31.736 us 1.03 0.04 4.1504 NA 26400 B NA
EscapeStringThreadLocal .NET 6.0 5 23.625 us 0.2993 us 0.2499 us 23.563 us 0.76 0.02 - NA - NA
EscapeStringSpan .NET 6.0 5 19.143 us 0.3798 us 0.8728 us 18.885 us 0.65 0.04 - 981 B - NA
EscapeStringSpanChars .NET 6.0 5 18.315 us 0.1320 us 0.1170 us 18.298 us 0.59 0.02 - 1,060 B - NA
EscapeStringSpanCharsInline .NET 6.0 5 18.914 us 0.3681 us 0.4787 us 18.710 us 0.62 0.02 - 1,147 B - NA
EscapeStringSpanIndex .NET 6.0 5 23.881 us 0.4764 us 1.1230 us 23.612 us 0.78 0.05 - 974 B - NA
EscapeStringSpanDict .NET 6.0 5 24.815 us 0.3961 us 0.3705 us 24.775 us 0.80 0.03 - 948 B - NA
EscapeStringLegacy .NET 8.0 5 16.411 us 0.8381 us 2.3775 us 15.541 us 0.53 0.07 - NA - NA
EscapeStringLegacyPlus .NET 8.0 5 13.326 us 0.2503 us 0.2679 us 13.252 us 0.43 0.01 - NA - NA
EscapeStringStringBuilder .NET 8.0 5 16.268 us 0.3154 us 0.2796 us 16.233 us 0.53 0.02 4.1809 2,662 B 26400 B NA
EscapeStringThreadLocal .NET 8.0 5 14.605 us 0.1120 us 0.0874 us 14.595 us 0.47 0.02 - 4,942 B - NA
EscapeStringSpan .NET 8.0 5 15.722 us 0.2356 us 0.2204 us 15.689 us 0.51 0.02 - 1,988 B - NA
EscapeStringSpanChars .NET 8.0 5 14.436 us 0.2524 us 0.2700 us 14.383 us 0.47 0.02 - 2,370 B - NA
EscapeStringSpanCharsInline .NET 8.0 5 14.550 us 0.2840 us 0.2790 us 14.507 us 0.47 0.01 - 2,486 B - NA
EscapeStringSpanIndex .NET 8.0 5 21.095 us 0.2644 us 0.2473 us 21.121 us 0.68 0.02 - 2,026 B - NA
EscapeStringSpanDict .NET 8.0 5 18.329 us 0.3515 us 0.3288 us 18.324 us 0.59 0.02 - 1,870 B - NA
EscapeStringLegacy .NET Framework 4.8 5 30.638 us 0.6064 us 0.8697 us 30.348 us 1.00 0.00 - NA - NA
EscapeStringLegacyPlus .NET Framework 4.8 5 26.310 us 0.4005 us 0.4612 us 26.178 us 0.85 0.03 - NA - NA
EscapeStringStringBuilder .NET Framework 4.8 5 46.668 us 1.4031 us 3.9576 us 46.005 us 1.50 0.13 6.3477 NA 40118 B NA
EscapeStringThreadLocal .NET Framework 4.8 5 49.680 us 2.7440 us 8.0906 us 50.383 us 1.79 0.16 2.1362 NA 13640 B NA
EscapeStringSpan .NET Framework 4.8 5 33.618 us 0.5941 us 1.0712 us 33.194 us 1.10 0.05 5.0659 862 B 32094 B NA
EscapeStringSpanChars .NET Framework 4.8 5 35.429 us 1.1210 us 3.2523 us 34.175 us 1.15 0.12 5.0659 1,001 B 32094 B NA
EscapeStringSpanCharsInline .NET Framework 4.8 5 44.021 us 0.8441 us 1.0049 us 43.701 us 1.43 0.05 5.0659 1,282 B 32094 B NA
EscapeStringSpanIndex .NET Framework 4.8 5 46.481 us 0.8849 us 1.1191 us 45.924 us 1.51 0.04 5.0659 850 B 32094 B NA
EscapeStringSpanDict .NET Framework 4.8 5 47.945 us 0.4416 us 0.3915 us 47.924 us 1.55 0.04 5.0659 809 B 32094 B NA
EscapeStringLegacy .NET 6.0 6 25.142 us 0.5013 us 0.5364 us 25.012 us 0.28 0.02 1.8921 NA 12000 B 0.10
EscapeStringLegacyPlus .NET 6.0 6 14.529 us 0.3673 us 1.0772 us 14.444 us 0.18 0.03 2.5482 NA 16000 B 0.13
EscapeStringStringBuilder .NET 6.0 6 16.228 us 0.1917 us 0.1793 us 16.233 us 0.18 0.01 6.1035 NA 38400 B 0.32
EscapeStringThreadLocal .NET 6.0 6 15.036 us 0.2989 us 0.8184 us 14.802 us 0.18 0.02 2.5482 NA 16000 B 0.13
EscapeStringSpan .NET 6.0 6 14.320 us 0.2744 us 0.4660 us 14.275 us 0.16 0.01 2.5482 981 B 16000 B 0.13
EscapeStringSpanChars .NET 6.0 6 15.848 us 0.6414 us 1.8402 us 15.442 us 0.19 0.03 2.5482 1,060 B 16000 B 0.13
EscapeStringSpanCharsInline .NET 6.0 6 16.664 us 0.5422 us 1.5817 us 16.282 us 0.20 0.03 2.5330 1,147 B 16000 B 0.13
EscapeStringSpanIndex .NET 6.0 6 14.429 us 0.2789 us 0.6463 us 14.146 us 0.17 0.02 2.5330 974 B 16000 B 0.13
EscapeStringSpanDict .NET 6.0 6 18.905 us 1.2314 us 3.6309 us 18.647 us 0.23 0.06 2.5482 948 B 16000 B 0.13
EscapeStringLegacy .NET 8.0 6 24.440 us 0.3123 us 0.2921 us 24.409 us 0.26 0.02 1.8921 NA 12000 B 0.10
EscapeStringLegacyPlus .NET 8.0 6 12.475 us 0.1764 us 0.1563 us 12.455 us 0.13 0.01 2.5482 NA 16000 B 0.13
EscapeStringStringBuilder .NET 8.0 6 15.724 us 0.2713 us 0.3016 us 15.676 us 0.17 0.01 6.1035 4,571 B 38400 B 0.32
EscapeStringThreadLocal .NET 8.0 6 11.456 us 0.3298 us 0.9517 us 11.195 us 0.14 0.02 2.5482 5,567 B 16000 B 0.13
EscapeStringSpan .NET 8.0 6 13.296 us 0.3974 us 1.1656 us 12.925 us 0.16 0.02 2.5482 2,027 B 16000 B 0.13
EscapeStringSpanChars .NET 8.0 6 15.124 us 0.7989 us 2.3305 us 14.786 us 0.18 0.03 2.5482 2,559 B 16000 B 0.13
EscapeStringSpanCharsInline .NET 8.0 6 12.679 us 0.4395 us 1.2750 us 12.449 us 0.15 0.02 2.5330 2,809 B 16000 B 0.13
EscapeStringSpanIndex .NET 8.0 6 11.809 us 0.1534 us 0.1198 us 11.801 us 0.13 0.01 2.5482 2,333 B 16000 B 0.13
EscapeStringSpanDict .NET 8.0 6 13.591 us 0.5934 us 1.6737 us 13.371 us 0.17 0.03 2.5482 2,272 B 16000 B 0.13
EscapeStringLegacy .NET Framework 4.8 6 83.505 us 3.2710 us 9.4375 us 82.794 us 1.00 0.00 19.0430 NA 120354 B 1.00
EscapeStringLegacyPlus .NET Framework 4.8 6 23.848 us 0.4313 us 0.9191 us 23.638 us 0.27 0.03 3.1738 NA 20059 B 0.17
EscapeStringStringBuilder .NET Framework 4.8 6 34.583 us 0.6217 us 1.3777 us 34.037 us 0.40 0.04 8.2397 NA 52154 B 0.43
EscapeStringThreadLocal .NET Framework 4.8 6 30.348 us 0.5959 us 0.7318 us 30.026 us 0.34 0.03 4.6997 NA 29687 B 0.25
EscapeStringSpan .NET Framework 4.8 6 32.557 us 0.5778 us 1.2437 us 32.356 us 0.38 0.04 5.7373 862 B 36106 B 0.30
EscapeStringSpanChars .NET Framework 4.8 6 25.537 us 0.1345 us 0.1192 us 25.547 us 0.27 0.02 3.6926 1,001 B 23268 B 0.19
EscapeStringSpanCharsInline .NET Framework 4.8 6 26.701 us 0.5285 us 1.2036 us 26.226 us 0.31 0.03 3.1738 1,282 B 20059 B 0.17
EscapeStringSpanIndex .NET Framework 4.8 6 39.646 us 0.8069 us 2.2494 us 39.212 us 0.48 0.06 5.7373 850 B 36106 B 0.30
EscapeStringSpanDict .NET Framework 4.8 6 40.354 us 1.4106 us 4.1371 us 39.949 us 0.49 0.06 5.7373 809 B 36106 B 0.30
EscapeStringLegacy .NET 6.0 7 32.235 us 1.2774 us 3.6857 us 31.393 us 0.40 0.05 1.8921 NA 12000 B 0.10
EscapeStringLegacyPlus .NET 6.0 7 21.630 us 0.8955 us 2.5838 us 21.456 us 0.27 0.04 2.5330 NA 16000 B 0.13
EscapeStringStringBuilder .NET 6.0 7 24.594 us 1.0676 us 3.0972 us 23.954 us 0.31 0.04 7.1411 NA 44800 B 0.37
EscapeStringThreadLocal .NET 6.0 7 20.016 us 0.7750 us 2.2361 us 19.581 us 0.25 0.03 2.5330 NA 16000 B 0.13
EscapeStringSpan .NET 6.0 7 21.260 us 0.8226 us 2.3865 us 20.619 us 0.26 0.03 2.5330 981 B 16000 B 0.13
EscapeStringSpanChars .NET 6.0 7 18.026 us 0.3557 us 0.8659 us 17.925 us 0.22 0.02 2.5330 1,060 B 16000 B 0.13
EscapeStringSpanCharsInline .NET 6.0 7 18.172 us 0.4733 us 1.3580 us 17.826 us 0.23 0.02 2.5330 1,147 B 16000 B 0.13
EscapeStringSpanIndex .NET 6.0 7 19.257 us 0.4985 us 1.3477 us 18.980 us 0.24 0.02 2.5330 974 B 16000 B 0.13
EscapeStringSpanDict .NET 6.0 7 18.130 us 0.3472 us 0.8386 us 17.982 us 0.23 0.02 2.5330 948 B 16000 B 0.13
EscapeStringLegacy .NET 8.0 7 23.245 us 0.4284 us 0.4933 us 23.123 us 0.30 0.02 1.8921 NA 12000 B 0.10
EscapeStringLegacyPlus .NET 8.0 7 13.882 us 0.2734 us 0.3922 us 13.744 us 0.18 0.01 2.5482 NA 16000 B 0.13
EscapeStringStringBuilder .NET 8.0 7 15.314 us 0.2951 us 0.2760 us 15.354 us 0.19 0.01 7.1411 4,550 B 44800 B 0.37
EscapeStringThreadLocal .NET 8.0 7 13.315 us 0.3014 us 0.8598 us 13.068 us 0.17 0.02 2.5482 5,574 B 16000 B 0.13
EscapeStringSpan .NET 8.0 7 19.388 us 0.7388 us 2.0958 us 19.038 us 0.24 0.03 2.5330 2,025 B 16000 B 0.13
EscapeStringSpanChars .NET 8.0 7 15.949 us 0.4106 us 1.1977 us 15.632 us 0.20 0.02 2.5330 2,418 B 16000 B 0.13
EscapeStringSpanCharsInline .NET 8.0 7 16.016 us 0.5140 us 1.5074 us 15.738 us 0.20 0.02 2.5482 2,796 B 16000 B 0.13
EscapeStringSpanIndex .NET 8.0 7 16.730 us 0.7297 us 2.1171 us 16.286 us 0.21 0.03 2.5482 2,360 B 16000 B 0.13
EscapeStringSpanDict .NET 8.0 7 14.399 us 0.2875 us 0.7920 us 14.144 us 0.18 0.02 2.5482 2,274 B 16000 B 0.13
EscapeStringLegacy .NET Framework 4.8 7 81.120 us 1.8960 us 5.4704 us 79.652 us 1.00 0.00 19.0430 NA 120354 B 1.00
EscapeStringLegacyPlus .NET Framework 4.8 7 30.965 us 0.9662 us 2.7878 us 30.745 us 0.38 0.04 3.1738 NA 20059 B 0.17
EscapeStringStringBuilder .NET Framework 4.8 7 45.325 us 1.0892 us 3.1252 us 45.489 us 0.56 0.05 9.5215 NA 60177 B 0.50
EscapeStringThreadLocal .NET Framework 4.8 7 40.173 us 0.9003 us 2.5394 us 40.187 us 0.50 0.04 4.9438 NA 31292 B 0.26
EscapeStringSpan .NET Framework 4.8 7 40.216 us 2.0174 us 5.8206 us 38.520 us 0.50 0.08 6.2256 862 B 39316 B 0.33
EscapeStringSpanChars .NET Framework 4.8 7 40.246 us 1.4749 us 4.2553 us 39.090 us 0.50 0.06 6.2256 1,001 B 39316 B 0.33
EscapeStringSpanCharsInline .NET Framework 4.8 7 34.370 us 0.6849 us 1.6540 us 34.295 us 0.43 0.03 3.1738 1,282 B 20059 B 0.17
EscapeStringSpanIndex .NET Framework 4.8 7 66.270 us 8.5724 us 25.2758 us 63.268 us 0.83 0.32 6.2256 850 B 39316 B 0.33
EscapeStringSpanDict .NET Framework 4.8 7 49.669 us 1.3642 us 3.7574 us 48.893 us 0.61 0.05 6.2256 809 B 39316 B 0.33
EscapeStringLegacy .NET 6.0 8 34.777 us 1.3243 us 3.7783 us 33.143 us 0.49 0.05 1.8921 NA 12000 B 0.10
EscapeStringLegacyPlus .NET 6.0 8 20.441 us 0.5266 us 1.5108 us 20.113 us 0.24 0.02 2.5330 NA 16000 B 0.13
EscapeStringStringBuilder .NET 6.0 8 24.792 us 0.4799 us 0.4928 us 24.698 us 0.30 0.01 7.9041 NA 49600 B 0.41
EscapeStringThreadLocal .NET 6.0 8 23.131 us 0.6261 us 1.7558 us 23.020 us 0.30 0.02 2.5330 NA 16000 B 0.13
EscapeStringSpan .NET 6.0 8 20.627 us 0.3867 us 0.3428 us 20.622 us 0.25 0.01 2.5330 981 B 16000 B 0.13
EscapeStringSpanChars .NET 6.0 8 19.417 us 0.3717 us 0.3650 us 19.511 us 0.24 0.00 2.5330 1,060 B 16000 B 0.13
EscapeStringSpanCharsInline .NET 6.0 8 18.631 us 0.3626 us 0.3392 us 18.536 us 0.23 0.00 2.5330 1,147 B 16000 B 0.13
EscapeStringSpanIndex .NET 6.0 8 20.714 us 0.4031 us 0.4313 us 20.631 us 0.25 0.01 2.5330 974 B 16000 B 0.13
EscapeStringSpanDict .NET 6.0 8 19.079 us 0.3743 us 0.7121 us 19.066 us 0.23 0.01 2.5330 948 B 16000 B 0.13
EscapeStringLegacy .NET 8.0 8 32.783 us 0.5236 us 0.4897 us 32.589 us 0.40 0.01 1.8921 NA 12000 B 0.10
EscapeStringLegacyPlus .NET 8.0 8 16.474 us 0.3241 us 0.4215 us 16.494 us 0.20 0.01 2.5330 NA 16000 B 0.13
EscapeStringStringBuilder .NET 8.0 8 18.637 us 0.6299 us 1.7868 us 18.215 us 0.22 0.02 7.9041 4,559 B 49600 B 0.41
EscapeStringThreadLocal .NET 8.0 8 19.545 us 0.9970 us 2.8766 us 18.661 us 0.25 0.03 2.5330 5,503 B 16000 B 0.13
EscapeStringSpan .NET 8.0 8 17.251 us 0.1616 us 0.1350 us 17.265 us 0.21 0.00 2.5330 2,025 B 16000 B 0.13
EscapeStringSpanChars .NET 8.0 8 17.026 us 0.3294 us 0.8385 us 16.669 us 0.21 0.01 2.5330 2,418 B 16000 B 0.13
EscapeStringSpanCharsInline .NET 8.0 8 16.405 us 0.1618 us 0.1434 us 16.395 us 0.20 0.00 2.5330 2,503 B 16000 B 0.13
EscapeStringSpanIndex .NET 8.0 8 16.086 us 0.1470 us 0.1375 us 16.080 us 0.20 0.00 2.5330 2,360 B 16000 B 0.13
EscapeStringSpanDict .NET 8.0 8 15.451 us 0.1329 us 0.1244 us 15.462 us 0.19 0.00 2.5330 2,274 B 16000 B 0.13
EscapeStringLegacy .NET Framework 4.8 8 82.041 us 1.2073 us 1.1293 us 82.112 us 1.00 0.00 19.0430 NA 120354 B 1.00
EscapeStringLegacyPlus .NET Framework 4.8 8 33.710 us 0.4842 us 1.1125 us 33.489 us 0.41 0.02 3.1738 NA 20059 B 0.17
EscapeStringStringBuilder .NET Framework 4.8 8 52.583 us 0.5877 us 0.5772 us 52.427 us 0.64 0.01 10.5591 NA 66596 B 0.55
EscapeStringThreadLocal .NET Framework 4.8 8 47.259 us 0.3498 us 0.3101 us 47.212 us 0.58 0.01 5.1880 NA 32897 B 0.27
EscapeStringSpan .NET Framework 4.8 8 44.246 us 0.5627 us 0.5264 us 44.043 us 0.54 0.01 6.2256 862 B 39316 B 0.33
EscapeStringSpanChars .NET Framework 4.8 8 44.345 us 0.4806 us 0.4013 us 44.349 us 0.54 0.01 6.2256 1,001 B 39316 B 0.33
EscapeStringSpanCharsInline .NET Framework 4.8 8 47.125 us 0.6190 us 0.5488 us 47.276 us 0.57 0.01 6.2256 1,282 B 39316 B 0.33
EscapeStringSpanIndex .NET Framework 4.8 8 52.597 us 0.6007 us 0.5325 us 52.412 us 0.64 0.01 6.2256 850 B 39316 B 0.33
EscapeStringSpanDict .NET Framework 4.8 8 52.406 us 0.6363 us 0.5313 us 52.573 us 0.64 0.01 6.2256 809 B 39316 B 0.33
EscapeStringLegacy .NET 6.0 9 42.556 us 0.4973 us 0.4652 us 42.461 us 0.41 0.00 1.8921 NA 12000 B 0.10
EscapeStringLegacyPlus .NET 6.0 9 27.591 us 0.4928 us 0.4369 us 27.435 us 0.27 0.01 2.5330 NA 16000 B 0.13
EscapeStringStringBuilder .NET 6.0 9 31.138 us 0.4859 us 0.4057 us 31.096 us 0.30 0.00 5.9814 NA 37600 B 0.31
EscapeStringThreadLocal .NET 6.0 9 29.107 us 0.1701 us 0.1508 us 29.089 us 0.28 0.00 2.5330 NA 16000 B 0.13
EscapeStringSpan .NET 6.0 9 26.306 us 0.1977 us 0.1651 us 26.288 us 0.25 0.00 2.5330 981 B 16000 B 0.13
EscapeStringSpanChars .NET 6.0 9 27.677 us 0.2965 us 0.2628 us 27.667 us 0.27 0.00 2.5330 1,060 B 16000 B 0.13
EscapeStringSpanCharsInline .NET 6.0 9 26.897 us 0.4870 us 0.4317 us 26.843 us 0.26 0.00 2.5330 1,147 B 16000 B 0.13
EscapeStringSpanIndex .NET 6.0 9 32.061 us 0.3107 us 0.2594 us 32.015 us 0.31 0.00 2.5024 974 B 16000 B 0.13
EscapeStringSpanDict .NET 6.0 9 29.773 us 0.1599 us 0.1335 us 29.809 us 0.29 0.00 2.5330 948 B 16000 B 0.13
EscapeStringLegacy .NET 8.0 9 33.853 us 0.5620 us 0.5257 us 33.730 us 0.33 0.01 1.8921 NA 12000 B 0.10
EscapeStringLegacyPlus .NET 8.0 9 27.605 us 0.5435 us 0.5084 us 27.502 us 0.27 0.01 2.5330 NA 16000 B 0.13
EscapeStringStringBuilder .NET 8.0 9 22.990 us 0.1215 us 0.0949 us 22.994 us 0.22 0.00 5.9814 4,557 B 37600 B 0.31
EscapeStringThreadLocal .NET 8.0 9 21.966 us 0.2988 us 0.2795 us 21.846 us 0.21 0.00 2.5330 5,588 B 16000 B 0.13
EscapeStringSpan .NET 8.0 9 24.373 us 0.2290 us 0.2030 us 24.327 us 0.24 0.00 2.5330 2,025 B 16000 B 0.13
EscapeStringSpanChars .NET 8.0 9 22.408 us 0.2692 us 0.2386 us 22.374 us 0.22 0.00 2.5330 2,404 B 16000 B 0.13
EscapeStringSpanCharsInline .NET 8.0 9 22.150 us 0.2858 us 0.2533 us 22.138 us 0.21 0.00 2.5330 2,497 B 16000 B 0.13
EscapeStringSpanIndex .NET 8.0 9 27.454 us 0.3677 us 0.3260 us 27.328 us 0.27 0.00 2.5330 2,361 B 16000 B 0.13
EscapeStringSpanDict .NET 8.0 9 22.240 us 0.2637 us 0.2202 us 22.188 us 0.21 0.00 2.5330 2,269 B 16000 B 0.13
EscapeStringLegacy .NET Framework 4.8 9 103.600 us 1.3000 us 1.1524 us 103.896 us 1.00 0.00 19.0430 NA 120354 B 1.00
EscapeStringLegacyPlus .NET Framework 4.8 9 43.764 us 0.4467 us 0.4178 us 43.606 us 0.42 0.01 3.1738 NA 20059 B 0.17
EscapeStringStringBuilder .NET Framework 4.8 9 59.329 us 1.0714 us 0.9498 us 59.069 us 0.57 0.01 9.0332 NA 56968 B 0.47
EscapeStringThreadLocal .NET Framework 4.8 9 56.556 us 0.5226 us 0.4888 us 56.420 us 0.55 0.01 5.5542 NA 35304 B 0.29
EscapeStringSpan .NET Framework 4.8 9 50.966 us 0.6342 us 0.5932 us 50.899 us 0.49 0.01 6.9580 862 B 44130 B 0.37
EscapeStringSpanChars .NET Framework 4.8 9 51.330 us 0.4257 us 0.3324 us 51.246 us 0.50 0.01 6.9580 1,001 B 44130 B 0.37
EscapeStringSpanCharsInline .NET Framework 4.8 9 55.253 us 0.7184 us 0.5999 us 55.087 us 0.53 0.01 6.9580 1,282 B 44130 B 0.37
EscapeStringSpanIndex .NET Framework 4.8 9 57.541 us 0.2672 us 0.2231 us 57.526 us 0.56 0.01 6.9580 850 B 44130 B 0.37
EscapeStringSpanDict .NET Framework 4.8 9 61.007 us 0.4485 us 0.4986 us 60.846 us 0.59 0.01 6.9580 809 B 44130 B 0.37
EscapeStringLegacy .NET 6.0 10 55.097 us 0.6056 us 0.5369 us 55.106 us 0.51 0.01 0.7324 NA 4800 B 0.10
EscapeStringLegacyPlus .NET 6.0 10 51.082 us 0.7554 us 0.5898 us 51.039 us 0.47 0.01 0.9766 NA 6400 B 0.13
EscapeStringStringBuilder .NET 6.0 10 63.248 us 1.0533 us 0.9337 us 62.988 us 0.58 0.01 7.9346 NA 50400 B 1.05
EscapeStringThreadLocal .NET 6.0 10 64.130 us 1.2467 us 1.4841 us 63.820 us 0.59 0.01 0.9766 NA 6400 B 0.13
EscapeStringSpan .NET 6.0 10 36.435 us 0.6180 us 0.5478 us 36.394 us 0.33 0.01 0.9766 981 B 6400 B 0.13
EscapeStringSpanChars .NET 6.0 10 36.079 us 0.3880 us 0.3030 us 36.198 us 0.33 0.00 0.9766 1,060 B 6400 B 0.13
EscapeStringSpanCharsInline .NET 6.0 10 35.824 us 0.3932 us 0.3678 us 35.919 us 0.33 0.01 0.9766 1,147 B 6400 B 0.13
EscapeStringSpanIndex .NET 6.0 10 42.751 us 0.5323 us 0.4445 us 42.781 us 0.39 0.01 0.9766 974 B 6400 B 0.13
EscapeStringSpanDict .NET 6.0 10 53.733 us 0.6386 us 0.8742 us 53.476 us 0.50 0.01 0.9766 948 B 6400 B 0.13
EscapeStringLegacy .NET 8.0 10 42.201 us 0.4218 us 0.3739 us 42.130 us 0.39 0.01 0.7324 NA 4800 B 0.10
EscapeStringLegacyPlus .NET 8.0 10 35.334 us 0.2296 us 0.2036 us 35.287 us 0.32 0.01 0.9766 NA 6400 B 0.13
EscapeStringStringBuilder .NET 8.0 10 50.887 us 0.7249 us 0.6426 us 50.867 us 0.47 0.01 7.9956 4,575 B 50400 B 1.05
EscapeStringThreadLocal .NET 8.0 10 47.636 us 0.3520 us 0.3120 us 47.703 us 0.44 0.01 0.9766 5,524 B 6400 B 0.13
EscapeStringSpan .NET 8.0 10 31.179 us 0.2472 us 0.2064 us 31.138 us 0.29 0.00 0.9766 1,992 B 6400 B 0.13
EscapeStringSpanChars .NET 8.0 10 29.908 us 0.3639 us 0.3038 us 29.914 us 0.27 0.00 1.0071 2,815 B 6400 B 0.13
EscapeStringSpanCharsInline .NET 8.0 10 30.161 us 0.3881 us 0.3030 us 30.098 us 0.28 0.01 1.0071 3,249 B 6400 B 0.13
EscapeStringSpanIndex .NET 8.0 10 44.677 us 0.4738 us 0.4200 us 44.747 us 0.41 0.01 0.9766 2,338 B 6400 B 0.13
EscapeStringSpanDict .NET 8.0 10 40.481 us 0.5376 us 0.4766 us 40.300 us 0.37 0.01 0.9766 2,264 B 6400 B 0.13
EscapeStringLegacy .NET Framework 4.8 10 108.849 us 2.1380 us 1.8953 us 108.495 us 1.00 0.00 7.5684 NA 48141 B 1.00
EscapeStringLegacyPlus .NET Framework 4.8 10 71.800 us 0.9619 us 0.8527 us 71.644 us 0.66 0.02 1.2207 NA 8024 B 0.17
EscapeStringStringBuilder .NET Framework 4.8 10 98.535 us 1.9687 us 2.0218 us 98.175 us 0.91 0.03 12.0850 NA 76225 B 1.58
EscapeStringThreadLocal .NET Framework 4.8 10 93.589 us 1.6262 us 1.3579 us 93.459 us 0.86 0.02 5.0049 NA 32095 B 0.67
EscapeStringSpan .NET Framework 4.8 10 64.082 us 1.2687 us 1.3029 us 64.011 us 0.59 0.02 6.3477 862 B 40119 B 0.83
EscapeStringSpanChars .NET Framework 4.8 10 61.496 us 0.9938 us 0.8299 us 61.221 us 0.56 0.01 5.8594 1,001 B 36909 B 0.77
EscapeStringSpanCharsInline .NET Framework 4.8 10 61.976 us 0.6584 us 0.5836 us 61.996 us 0.57 0.01 5.2490 1,282 B 33700 B 0.70
EscapeStringSpanIndex .NET Framework 4.8 10 69.439 us 0.8194 us 0.7264 us 69.437 us 0.64 0.01 6.3477 850 B 40119 B 0.83
EscapeStringSpanDict .NET Framework 4.8 10 100.212 us 0.9937 us 0.8809 us 100.151 us 0.92 0.02 6.3477 809 B 40119 B 0.83

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...

codecov[bot] commented 7 months ago

Codecov Report

Attention: 6 lines in your changes are missing coverage. Please review.

Comparison is base (61edad9) 53.96% compared to head (f697283) 53.97%. Report is 2 commits behind head on master.

Files Patch % Lines
Stack/Opc.Ua.Core/Types/Encoders/JsonEncoder.cs 82.35% 5 Missing and 1 partial :warning:
Additional details and impacted files ```diff @@ 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 ```

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.

bhnaphade commented 7 months ago

please check there is one caveat

addressed the issue