Improve `double` formatting performance on net8+ and fix equality incorrectness re special doubles by mgravell · Pull Request #2928 · StackExchange/StackExchange.Redis
delta, before (limiting to relevant) - note in particular allocs (scroll right):
| Method | s | value | host | port | Mean | Error | StdDev | Median | Op/s | Gen0 | Allocated | |-------------- |------- |---------- |--------- |------ |-----------:|----------:|----------:|-----------:|--------------:|-------:|----------:| | ParseDouble | -1 | ? | ? | ? | 56.424 ns | 1.1702 ns | 2.7122 ns | 56.113 ns | 17,722,894.2 | - | - | | ParseDouble | -inf | ? | ? | ? | 2.900 ns | 0.0993 ns | 0.1815 ns | 2.879 ns | 344,866,763.5 | - | - | | FormatDouble | ? | -Infinity | ? | ? | 3.012 ns | 0.1001 ns | 0.1558 ns | 3.008 ns | 331,955,012.2 | - | - | | FormatDouble | ? | -1 | ? | ? | 93.365 ns | 1.8845 ns | 2.8779 ns | 93.333 ns | 10,710,608.6 | 0.0050 | 32 B | | ParseDouble | 0 | ? | ? | ? | 2.694 ns | 0.0872 ns | 0.1134 ns | 2.703 ns | 371,187,328.7 | - | - | | FormatDouble | ? | 0 | ? | ? | 45.925 ns | 0.9217 ns | 0.9052 ns | 45.977 ns | 21,774,478.6 | 0.0038 | 24 B | | ParseDouble | 123442 | ? | ? | ? | 81.211 ns | 1.6605 ns | 2.1000 ns | 81.056 ns | 12,313,592.5 | - | - | | FormatDouble | ? | 123442 | ? | ? | 149.446 ns | 3.0354 ns | 4.8145 ns | 149.223 ns | 6,691,386.7 | 0.0062 | 40 B | | ParseDouble | 64 | ? | ? | ? | 62.042 ns | 1.2612 ns | 2.5763 ns | 61.844 ns | 16,118,182.2 | - | - | | FormatDouble | ? | NaN | ? | ? | 13.124 ns | 0.2994 ns | 0.4920 ns | 13.071 ns | 76,197,072.3 | - | - | | FormatDouble | ? | 64 | ? | ? | 124.475 ns | 2.5356 ns | 3.4708 ns | 124.267 ns | 8,033,736.3 | 0.0050 | 32 B | | ParseDouble | nan | ? | ? | ? | 3.468 ns | 0.1105 ns | 0.1512 ns | 3.459 ns | 288,367,071.9 | - | - |
after (note no allocs):
| Method | s | value | host | port | Mean | Error | StdDev | Op/s | Gen0 | Allocated | |-------------- |------- |---------- |--------- |------ |-----------:|----------:|----------:|--------------:|-------:|----------:| | ParseDouble | -1 | ? | ? | ? | 54.380 ns | 1.1219 ns | 1.9051 ns | 18,389,178.2 | - | - | | ParseDouble | -inf | ? | ? | ? | 4.124 ns | 0.1213 ns | 0.2423 ns | 242,509,622.1 | - | - | | FormatDouble | ? | -Infinity | ? | ? | 2.991 ns | 0.1011 ns | 0.2087 ns | 334,327,800.4 | - | - | | FormatDouble | ? | -1 | ? | ? | 80.053 ns | 1.6459 ns | 4.2191 ns | 12,491,696.1 | - | - | | ParseDouble | 0 | ? | ? | ? | 2.862 ns | 0.0978 ns | 0.1372 ns | 349,429,539.4 | - | - | | FormatDouble | ? | 0 | ? | ? | 32.396 ns | 0.6835 ns | 0.9356 ns | 30,867,908.5 | - | - | | ParseDouble | 123442 | ? | ? | ? | 77.273 ns | 1.5881 ns | 2.6094 ns | 12,941,150.5 | - | - | | FormatDouble | ? | 123442 | ? | ? | 129.659 ns | 2.5727 ns | 5.5379 ns | 7,712,560.7 | - | - | | ParseDouble | 64 | ? | ? | ? | 60.785 ns | 1.2505 ns | 3.0675 ns | 16,451,422.2 | - | - | | FormatDouble | ? | NaN | ? | ? | 20.836 ns | 0.4540 ns | 0.5047 ns | 47,994,833.7 | - | - | | FormatDouble | ? | 64 | ? | ? | 109.433 ns | 2.1685 ns | 2.5814 ns | 9,138,011.9 | - | - | | ParseDouble | nan | ? | ? | ? | 3.551 ns | 0.1058 ns | 0.2114 ns | 281,591,155.7 | - | - |
only "regression" is parse -inf, from 2.9ns to 4.1ns - pretty sure that's just benchmark jitter /cc @NickCraver