Skip to content

Instantly share code, notes, and snippets.

@GrabYourPitchforks
Last active August 15, 2018 01:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save GrabYourPitchforks/14bb9282a4be353a8be12de88a4e12dd to your computer and use it in GitHub Desktop.
Save GrabYourPitchforks/14bb9282a4be353a8be12de88a4e12dd to your computer and use it in GitHub Desktop.
String performance optimizations

This tests the performance of MemoryExtensions.ToUpperInvariant(this ReadOnlySpan<char>, Span<char>), String.GetHashCode(), and String.GetHashCode(StringComparison.OrdinalIgnoreCase).

In below table:

  • baseline coreclr = 3.0.0-preview1-26808-05
  • local build (6) = local build from private dev Utf8String branch, 6th rev.
  • local build (7) = local build from private dev Utf8String branch, 7th rev.
Method Toolchain StringLength Mean Error StdDev Scaled ScaledSD
ToUpperInvariant baseline coreclr 0 27.112 ns 0.7416 ns 1.1763 ns 1.00 0.00
ToUpperInvariant local build (6) 0 28.529 ns 0.2706 ns 0.2398 ns 1.05 0.04
ToUpperInvariant local build (7) 0 28.066 ns 0.1443 ns 0.1350 ns 1.04 0.04
GetHashCode_Ordinal baseline coreclr 0 4.313 ns 0.0296 ns 0.0231 ns 1.00 0.00
GetHashCode_Ordinal local build (6) 0 5.244 ns 0.0579 ns 0.0484 ns 1.22 0.01
GetHashCode_Ordinal local build (7) 0 3.086 ns 0.0237 ns 0.0210 ns 0.72 0.01
GetHashCode_OrdinalIgnoreCase baseline coreclr 0 18.678 ns 0.1951 ns 0.1825 ns 1.00 0.00
GetHashCode_OrdinalIgnoreCase local build (6) 0 20.105 ns 0.1053 ns 0.0934 ns 1.08 0.01
GetHashCode_OrdinalIgnoreCase local build (7) 0 8.921 ns 0.1123 ns 0.0995 ns 0.48 0.01
ToUpperInvariant baseline coreclr 4 35.407 ns 0.6994 ns 0.7484 ns 1.00 0.00
ToUpperInvariant local build (6) 4 28.775 ns 0.3312 ns 0.3099 ns 0.81 0.02
ToUpperInvariant local build (7) 4 31.174 ns 0.4099 ns 0.3835 ns 0.88 0.02
GetHashCode_Ordinal baseline coreclr 4 6.026 ns 0.1500 ns 0.1541 ns 1.00 0.00
GetHashCode_Ordinal local build (6) 4 6.093 ns 0.0498 ns 0.0441 ns 1.01 0.03
GetHashCode_Ordinal local build (7) 4 4.931 ns 0.0534 ns 0.0500 ns 0.82 0.02
GetHashCode_OrdinalIgnoreCase baseline coreclr 4 49.758 ns 1.0321 ns 0.9654 ns 1.00 0.00
GetHashCode_OrdinalIgnoreCase local build (6) 4 43.354 ns 0.2082 ns 0.1948 ns 0.87 0.02
GetHashCode_OrdinalIgnoreCase local build (7) 4 16.042 ns 0.1153 ns 0.1079 ns 0.32 0.01
ToUpperInvariant baseline coreclr 5 35.801 ns 0.2261 ns 0.2115 ns 1.00 0.00
ToUpperInvariant local build (6) 5 28.751 ns 0.4291 ns 0.4014 ns 0.80 0.01
ToUpperInvariant local build (7) 5 34.639 ns 0.8401 ns 1.0001 ns 0.97 0.03
GetHashCode_Ordinal baseline coreclr 5 6.201 ns 0.1417 ns 0.1326 ns 1.00 0.00
GetHashCode_Ordinal local build (6) 5 6.153 ns 0.0499 ns 0.0417 ns 0.99 0.02
GetHashCode_Ordinal local build (7) 5 5.493 ns 0.1443 ns 0.2711 ns 0.89 0.05
GetHashCode_OrdinalIgnoreCase baseline coreclr 5 49.420 ns 0.4589 ns 0.4292 ns 1.00 0.00
GetHashCode_OrdinalIgnoreCase local build (6) 5 45.264 ns 0.5892 ns 0.5512 ns 0.92 0.01
GetHashCode_OrdinalIgnoreCase local build (7) 5 16.310 ns 0.3465 ns 0.3241 ns 0.33 0.01
ToUpperInvariant baseline coreclr 6 37.879 ns 0.7674 ns 0.7179 ns 1.00 0.00
ToUpperInvariant local build (6) 6 28.755 ns 0.2657 ns 0.2485 ns 0.76 0.02
ToUpperInvariant local build (7) 6 32.251 ns 0.3301 ns 0.3088 ns 0.85 0.02
GetHashCode_Ordinal baseline coreclr 6 6.931 ns 0.0897 ns 0.0839 ns 1.00 0.00
GetHashCode_Ordinal local build (6) 6 6.908 ns 0.0403 ns 0.0337 ns 1.00 0.01
GetHashCode_Ordinal local build (7) 6 7.500 ns 0.1145 ns 0.1071 ns 1.08 0.02
GetHashCode_OrdinalIgnoreCase baseline coreclr 6 48.922 ns 0.4234 ns 0.3960 ns 1.00 0.00
GetHashCode_OrdinalIgnoreCase local build (6) 6 44.963 ns 0.3350 ns 0.2970 ns 0.92 0.01
GetHashCode_OrdinalIgnoreCase local build (7) 6 16.465 ns 0.1662 ns 0.1555 ns 0.34 0.00
ToUpperInvariant baseline coreclr 8 38.584 ns 0.6842 ns 0.6400 ns 1.00 0.00
ToUpperInvariant local build (6) 8 30.847 ns 0.1948 ns 0.1822 ns 0.80 0.01
ToUpperInvariant local build (7) 8 35.489 ns 0.4056 ns 0.3596 ns 0.92 0.02
GetHashCode_Ordinal baseline coreclr 8 8.524 ns 0.1923 ns 0.1799 ns 1.00 0.00
GetHashCode_Ordinal local build (6) 8 8.491 ns 0.0996 ns 0.0883 ns 1.00 0.02
GetHashCode_Ordinal local build (7) 8 8.355 ns 0.1871 ns 0.1750 ns 0.98 0.03
GetHashCode_OrdinalIgnoreCase baseline coreclr 8 52.789 ns 0.2734 ns 0.2283 ns 1.00 0.00
GetHashCode_OrdinalIgnoreCase local build (6) 8 48.555 ns 0.3863 ns 0.3425 ns 0.92 0.01
GetHashCode_OrdinalIgnoreCase local build (7) 8 18.977 ns 0.4012 ns 0.4460 ns 0.36 0.01
ToUpperInvariant baseline coreclr 12 44.065 ns 0.9062 ns 0.8476 ns 1.00 0.00
ToUpperInvariant local build (6) 12 31.734 ns 0.2659 ns 0.2357 ns 0.72 0.01
ToUpperInvariant local build (7) 12 36.682 ns 0.2457 ns 0.2298 ns 0.83 0.02
GetHashCode_Ordinal baseline coreclr 12 11.074 ns 0.1309 ns 0.1225 ns 1.00 0.00
GetHashCode_Ordinal local build (6) 12 11.229 ns 0.0532 ns 0.0498 ns 1.01 0.01
GetHashCode_Ordinal local build (7) 12 10.760 ns 0.0810 ns 0.0676 ns 0.97 0.01
GetHashCode_OrdinalIgnoreCase baseline coreclr 12 58.343 ns 0.7073 ns 0.6270 ns 1.00 0.00
GetHashCode_OrdinalIgnoreCase local build (6) 12 54.238 ns 1.1591 ns 1.4234 ns 0.93 0.03
GetHashCode_OrdinalIgnoreCase local build (7) 12 21.889 ns 0.1729 ns 0.1617 ns 0.38 0.00
ToUpperInvariant baseline coreclr 100 136.112 ns 2.2649 ns 3.7213 ns 1.00 0.00
ToUpperInvariant local build (6) 100 64.421 ns 0.2800 ns 0.2619 ns 0.47 0.01
ToUpperInvariant local build (7) 100 77.626 ns 1.7653 ns 3.5660 ns 0.57 0.03
GetHashCode_Ordinal baseline coreclr 100 84.672 ns 0.9272 ns 0.7743 ns 1.00 0.00
GetHashCode_Ordinal local build (6) 100 84.974 ns 0.3928 ns 0.3674 ns 1.00 0.01
GetHashCode_Ordinal local build (7) 100 82.864 ns 0.6180 ns 0.5781 ns 0.98 0.01
GetHashCode_OrdinalIgnoreCase baseline coreclr 100 235.276 ns 4.6731 ns 7.6781 ns 1.00 0.00
GetHashCode_OrdinalIgnoreCase local build (6) 100 159.288 ns 1.8972 ns 1.6818 ns 0.68 0.02
GetHashCode_OrdinalIgnoreCase local build (7) 100 98.823 ns 0.7694 ns 0.7197 ns 0.42 0.01
ToUpperInvariant baseline coreclr 1000 1,054.925 ns 20.6730 ns 19.3376 ns 1.00 0.00
ToUpperInvariant local build (6) 1000 398.685 ns 2.0002 ns 1.6702 ns 0.38 0.01
ToUpperInvariant local build (7) 1000 409.100 ns 7.1746 ns 6.7111 ns 0.39 0.01
GetHashCode_Ordinal baseline coreclr 1000 821.523 ns 4.1718 ns 3.6982 ns 1.00 0.00
GetHashCode_Ordinal local build (6) 1000 837.539 ns 4.1703 ns 3.9009 ns 1.02 0.01
GetHashCode_Ordinal local build (7) 1000 831.497 ns 4.3487 ns 3.8550 ns 1.01 0.01
GetHashCode_OrdinalIgnoreCase baseline coreclr 1000 1,911.866 ns 11.5271 ns 10.7824 ns 1.00 0.00
GetHashCode_OrdinalIgnoreCase local build (6) 1000 1,308.217 ns 21.4140 ns 18.9830 ns 0.68 0.01
GetHashCode_OrdinalIgnoreCase local build (7) 1000 897.387 ns 16.9168 ns 16.6146 ns 0.47 0.01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment