Skip to content

Instantly share code, notes, and snippets.

@jtattermusch
Last active June 12, 2020 15:48
Show Gist options
  • Save jtattermusch/0115b65b5eb22a9119a9458c0d69763d to your computer and use it in GitHub Desktop.
Save jtattermusch/0115b65b5eb22a9119a9458c0d69763d to your computer and use it in GitHub Desktop.
WriteMessagesBenchmark
======================
BEFORE
BenchmarkDotNet=v0.11.4, OS=debian rodete
Intel Xeon W-2135 CPU 3.70GHz, 1 CPU, 12 logical and 6 physical cores
.NET Core SDK=3.1.301
[Host] : .NET Core 2.1.16 (CoreCLR 4.6.28516.03, CoreFX 4.6.28516.10), 64bit RyuJIT
DefaultJob : .NET Core 2.1.16 (CoreCLR 4.6.28516.03, CoreFX 4.6.28516.10), 64bit RyuJIT
| Method | messageCount | Mean | Error | StdDev | Gen 0/1k Op | Gen 1/1k Op | Gen 2/1k Op | Allocated Memory/Op |
|--------------------------------------------------------------------- |------------- |-------------:|------------:|------------:|------------:|------------:|------------:|--------------------:|
| ManyWrapperFieldsMessage_ToByteArray | ? | 631.95 ns | 1.4252 ns | 1.1127 ns | 0.0381 | - | - | 168 B |
| ManyWrapperFieldsMessage_WriteToCodedOutputStream | ? | 374.11 ns | 1.8610 ns | 1.7407 ns | 0.0110 | - | - | 48 B |
| ManyPrimitiveFieldsMessage_ToByteArray | ? | 229.21 ns | 0.9716 ns | 0.9089 ns | 0.0350 | - | - | 152 B |
| ManyPrimitiveFieldsMessage_WriteToCodedOutputStream | ? | 148.87 ns | 0.1996 ns | 0.1667 ns | 0.0110 | - | - | 48 B |
| EmptyMessage_ToByteArray | ? | 21.69 ns | 0.1998 ns | 0.1560 ns | 0.0166 | - | - | 72 B |
| EmptyMessage_WriteToCodedOutputStream | ? | 12.19 ns | 0.1880 ns | 0.1759 ns | 0.0111 | - | - | 48 B |
| ManyWrapperFieldsMessage_WriteDelimitedMessagesToCodedOutputStream | 10 | 6,141.92 ns | 121.4397 ns | 113.5947 ns | 0.0076 | - | - | 48 B |
| ManyPrimitiveFieldsMessage_WriteDelimitedMessagesToCodedOutputStream | 10 | 2,134.74 ns | 13.1636 ns | 11.6692 ns | 0.0076 | - | - | 48 B |
| ManyWrapperFieldsMessage_WriteDelimitedMessagesToCodedOutputStream | 100 | 61,214.58 ns | 477.3865 ns | 446.5477 ns | - | - | - | 48 B |
| ManyPrimitiveFieldsMessage_WriteDelimitedMessagesToCodedOutputStream | 100 | 21,130.95 ns | 159.0414 ns | 140.9861 ns | - | - | - | 48 B |
AFTER
BenchmarkDotNet=v0.11.4, OS=debian rodete
Intel Xeon W-2135 CPU 3.70GHz, 1 CPU, 12 logical and 6 physical cores
.NET Core SDK=3.1.301
[Host] : .NET Core 2.1.16 (CoreCLR 4.6.28516.03, CoreFX 4.6.28516.10), 64bit RyuJIT
DefaultJob : .NET Core 2.1.16 (CoreCLR 4.6.28516.03, CoreFX 4.6.28516.10), 64bit RyuJIT
| Method | messageCount | Mean | Error | StdDev | Gen 0/1k Op | Gen 1/1k Op | Gen 2/1k Op | Allocated Memory/Op |
|--------------------------------------------------------------------- |------------- |-------------:|------------:|------------:|------------:|------------:|------------:|--------------------:|
| ManyWrapperFieldsMessage_ToByteArray | ? | 650.69 ns | 1.9214 ns | 1.7033 ns | 0.0420 | - | - | 184 B |
| ManyWrapperFieldsMessage_WriteToCodedOutputStream | ? | 396.51 ns | 1.6271 ns | 1.5220 ns | 0.0148 | - | - | 64 B |
| ManyWrapperFieldsMessage_WriteToSpan | ? | 368.66 ns | 1.6349 ns | 1.5293 ns | - | - | - | - |
| ManyPrimitiveFieldsMessage_ToByteArray | ? | 372.00 ns | 1.7960 ns | 1.4022 ns | 0.0386 | - | - | 168 B |
| ManyPrimitiveFieldsMessage_WriteToCodedOutputStream | ? | 294.08 ns | 1.9526 ns | 1.8265 ns | 0.0148 | - | - | 64 B |
| ManyPrimitiveFieldsMessage_WriteToSpan | ? | 267.34 ns | 0.4635 ns | 0.3871 ns | - | - | - | - |
| EmptyMessage_ToByteArray | ? | 44.79 ns | 0.2830 ns | 0.2647 ns | 0.0203 | - | - | 88 B |
| EmptyMessage_WriteToCodedOutputStream | ? | 34.10 ns | 0.0687 ns | 0.0643 ns | 0.0148 | - | - | 64 B |
| EmptyMessage_WriteToSpan | ? | 20.09 ns | 0.0877 ns | 0.0777 ns | - | - | - | - |
| ManyWrapperFieldsMessage_WriteDelimitedMessagesToCodedOutputStream | 10 | 6,143.68 ns | 43.7328 ns | 38.7680 ns | 0.0076 | - | - | 64 B |
| ManyWrapperFieldsMessage_WriteDelimitedMessagesToSpan | 10 | 6,164.20 ns | 30.4917 ns | 27.0301 ns | - | - | - | - |
| ManyPrimitiveFieldsMessage_WriteDelimitedMessagesToCodedOutputStream | 10 | 3,512.97 ns | 12.8595 ns | 12.0288 ns | 0.0114 | - | - | 64 B |
| ManyPrimitiveFieldsMessage_WriteDelimitedMessagesToSpan | 10 | 3,243.55 ns | 15.7413 ns | 13.9542 ns | - | - | - | - |
| ManyWrapperFieldsMessage_WriteDelimitedMessagesToCodedOutputStream | 100 | 62,380.37 ns | 410.8572 ns | 384.3161 ns | - | - | - | 64 B |
| ManyWrapperFieldsMessage_WriteDelimitedMessagesToSpan | 100 | 60,428.32 ns | 277.5547 ns | 231.7708 ns | - | - | - | - |
| ManyPrimitiveFieldsMessage_WriteDelimitedMessagesToCodedOutputStream | 100 | 35,248.04 ns | 159.7366 ns | 124.7118 ns | - | - | - | 64 B |
| ManyPrimitiveFieldsMessage_WriteDelimitedMessagesToSpan | 100 | 32,503.54 ns | 130.9447 ns | 122.4857 ns | - | - | - | - |
AFTER 2
no-inline Varint
no-inline fixedInt
BenchmarkDotNet=v0.11.4, OS=debian rodete
Intel Xeon W-2135 CPU 3.70GHz, 1 CPU, 12 logical and 6 physical cores
.NET Core SDK=3.1.301
[Host] : .NET Core 2.1.16 (CoreCLR 4.6.28516.03, CoreFX 4.6.28516.10), 64bit RyuJIT
DefaultJob : .NET Core 2.1.16 (CoreCLR 4.6.28516.03, CoreFX 4.6.28516.10), 64bit RyuJIT
| Method | messageCount | Mean | Error | StdDev | Gen 0/1k Op | Gen 1/1k Op | Gen 2/1k Op | Allocated Memory/Op |
|--------------------------------------------------------------------- |------------- |-------------:|------------:|------------:|------------:|------------:|------------:|--------------------:|
| ManyWrapperFieldsMessage_ToByteArray | ? | 705.44 ns | 1.0748 ns | 0.8391 ns | 0.0420 | - | - | 184 B |
| ManyWrapperFieldsMessage_WriteToCodedOutputStream | ? | 438.70 ns | 1.8359 ns | 1.7173 ns | 0.0148 | - | - | 64 B |
| ManyWrapperFieldsMessage_WriteToSpan | ? | 414.64 ns | 1.6975 ns | 1.5048 ns | - | - | - | - |
| ManyPrimitiveFieldsMessage_ToByteArray | ? | 299.16 ns | 0.3611 ns | 0.3201 ns | 0.0386 | - | - | 168 B |
| ManyPrimitiveFieldsMessage_WriteToCodedOutputStream | ? | 218.87 ns | 0.8826 ns | 0.8256 ns | 0.0148 | - | - | 64 B |
| ManyPrimitiveFieldsMessage_WriteToSpan | ? | 201.91 ns | 1.1531 ns | 1.0786 ns | - | - | - | - |
| EmptyMessage_ToByteArray | ? | 43.91 ns | 0.1069 ns | 0.0893 ns | 0.0203 | - | - | 88 B |
| EmptyMessage_WriteToCodedOutputStream | ? | 35.41 ns | 0.0912 ns | 0.0853 ns | 0.0148 | - | - | 64 B |
| EmptyMessage_WriteToSpan | ? | 20.10 ns | 0.1045 ns | 0.0977 ns | - | - | - | - |
| ManyWrapperFieldsMessage_WriteDelimitedMessagesToCodedOutputStream | 10 | 6,633.94 ns | 23.9488 ns | 22.4017 ns | 0.0076 | - | - | 64 B |
| ManyWrapperFieldsMessage_WriteDelimitedMessagesToSpan | 10 | 6,384.34 ns | 26.1508 ns | 24.4615 ns | - | - | - | - |
| ManyPrimitiveFieldsMessage_WriteDelimitedMessagesToCodedOutputStream | 10 | 2,742.13 ns | 10.4236 ns | 9.7503 ns | 0.0114 | - | - | 64 B |
| ManyPrimitiveFieldsMessage_WriteDelimitedMessagesToSpan | 10 | 2,597.06 ns | 2.2042 ns | 1.8406 ns | - | - | - | - |
| ManyWrapperFieldsMessage_WriteDelimitedMessagesToCodedOutputStream | 100 | 66,333.69 ns | 331.5210 ns | 293.8847 ns | - | - | - | 64 B |
| ManyWrapperFieldsMessage_WriteDelimitedMessagesToSpan | 100 | 64,743.87 ns | 388.1227 ns | 363.0502 ns | - | - | - | - |
| ManyPrimitiveFieldsMessage_WriteDelimitedMessagesToCodedOutputStream | 100 | 27,124.24 ns | 101.7553 ns | 95.1820 ns | - | - | - | 64 B |
| ManyPrimitiveFieldsMessage_WriteDelimitedMessagesToSpan | 100 | 25,780.86 ns | 88.2858 ns | 82.5826 ns | - | - | - | - |
AFTER 3
no-inline varint
BenchmarkDotNet=v0.11.4, OS=debian rodete
Intel Xeon W-2135 CPU 3.70GHz, 1 CPU, 12 logical and 6 physical cores
.NET Core SDK=3.1.301
[Host] : .NET Core 2.1.16 (CoreCLR 4.6.28516.03, CoreFX 4.6.28516.10), 64bit RyuJIT
DefaultJob : .NET Core 2.1.16 (CoreCLR 4.6.28516.03, CoreFX 4.6.28516.10), 64bit RyuJIT
| Method | messageCount | Mean | Error | StdDev | Gen 0/1k Op | Gen 1/1k Op | Gen 2/1k Op | Allocated Memory/Op |
|--------------------------------------------------------------------- |------------- |-------------:|------------:|------------:|------------:|------------:|------------:|--------------------:|
| ManyWrapperFieldsMessage_ToByteArray | ? | 694.61 ns | 2.2295 ns | 1.9764 ns | 0.0420 | - | - | 184 B |
| ManyWrapperFieldsMessage_WriteToCodedOutputStream | ? | 432.87 ns | 1.8086 ns | 1.6918 ns | 0.0148 | - | - | 64 B |
| ManyWrapperFieldsMessage_WriteToSpan | ? | 408.82 ns | 2.5108 ns | 2.2257 ns | - | - | - | - |
| ManyPrimitiveFieldsMessage_ToByteArray | ? | 364.75 ns | 2.4289 ns | 2.1531 ns | 0.0386 | - | - | 168 B |
| ManyPrimitiveFieldsMessage_WriteToCodedOutputStream | ? | 280.60 ns | 1.1490 ns | 1.0186 ns | 0.0148 | - | - | 64 B |
| ManyPrimitiveFieldsMessage_WriteToSpan | ? | 267.36 ns | 1.2153 ns | 1.0149 ns | - | - | - | - |
| EmptyMessage_ToByteArray | ? | 43.77 ns | 0.1368 ns | 0.1068 ns | 0.0203 | - | - | 88 B |
| EmptyMessage_WriteToCodedOutputStream | ? | 35.47 ns | 0.1434 ns | 0.1341 ns | 0.0148 | - | - | 64 B |
| EmptyMessage_WriteToSpan | ? | 20.12 ns | 0.1101 ns | 0.0919 ns | - | - | - | - |
| ManyWrapperFieldsMessage_WriteDelimitedMessagesToCodedOutputStream | 10 | 6,430.51 ns | 29.4592 ns | 27.5561 ns | 0.0076 | - | - | 64 B |
| ManyWrapperFieldsMessage_WriteDelimitedMessagesToSpan | 10 | 6,412.21 ns | 24.4808 ns | 22.8994 ns | - | - | - | - |
| ManyPrimitiveFieldsMessage_WriteDelimitedMessagesToCodedOutputStream | 10 | 3,379.47 ns | 11.6922 ns | 10.9369 ns | 0.0114 | - | - | 64 B |
| ManyPrimitiveFieldsMessage_WriteDelimitedMessagesToSpan | 10 | 3,238.49 ns | 12.6863 ns | 10.5936 ns | - | - | - | - |
| ManyWrapperFieldsMessage_WriteDelimitedMessagesToCodedOutputStream | 100 | 64,640.52 ns | 367.3435 ns | 343.6134 ns | - | - | - | 64 B |
| ManyWrapperFieldsMessage_WriteDelimitedMessagesToSpan | 100 | 64,287.05 ns | 331.3515 ns | 293.7345 ns | - | - | - | - |
| ManyPrimitiveFieldsMessage_WriteDelimitedMessagesToCodedOutputStream | 100 | 33,777.95 ns | 120.9726 ns | 107.2390 ns | - | - | - | 64 B |
| ManyPrimitiveFieldsMessage_WriteDelimitedMessagesToSpan | 100 | 32,530.61 ns | 220.6950 ns | 184.2903 ns | - | - | - | - |
AFTER 4
no-inline varint
BenchmarkDotNet=v0.11.4, OS=debian rodete
Intel Xeon W-2135 CPU 3.70GHz, 1 CPU, 12 logical and 6 physical cores
.NET Core SDK=3.1.301
[Host] : .NET Core 2.1.16 (CoreCLR 4.6.28516.03, CoreFX 4.6.28516.10), 64bit RyuJIT
DefaultJob : .NET Core 2.1.16 (CoreCLR 4.6.28516.03, CoreFX 4.6.28516.10), 64bit RyuJIT
| Method | messageCount | Mean | Error | StdDev | Gen 0/1k Op | Gen 1/1k Op | Gen 2/1k Op | Allocated Memory/Op |
|--------------------------------------------------------------------- |------------- |-------------:|------------:|------------:|------------:|------------:|------------:|--------------------:|
| ManyWrapperFieldsMessage_ToByteArray | ? | 659.02 ns | 2.9097 ns | 2.7217 ns | 0.0420 | - | - | 184 B |
| ManyWrapperFieldsMessage_WriteToCodedOutputStream | ? | 395.29 ns | 1.9158 ns | 1.5998 ns | 0.0148 | - | - | 64 B |
| ManyWrapperFieldsMessage_WriteToSpan | ? | 375.65 ns | 1.7355 ns | 1.5384 ns | - | - | - | - |
| ManyPrimitiveFieldsMessage_ToByteArray | ? | 321.14 ns | 0.4798 ns | 0.4006 ns | 0.0386 | - | - | 168 B |
| ManyPrimitiveFieldsMessage_WriteToCodedOutputStream | ? | 241.42 ns | 1.7834 ns | 1.5810 ns | 0.0148 | - | - | 64 B |
| ManyPrimitiveFieldsMessage_WriteToSpan | ? | 220.50 ns | 0.9386 ns | 0.8320 ns | - | - | - | - |
| EmptyMessage_ToByteArray | ? | 43.96 ns | 0.2163 ns | 0.1688 ns | 0.0203 | - | - | 88 B |
| EmptyMessage_WriteToCodedOutputStream | ? | 35.67 ns | 0.0616 ns | 0.0546 ns | 0.0148 | - | - | 64 B |
| EmptyMessage_WriteToSpan | ? | 20.13 ns | 0.0970 ns | 0.0860 ns | - | - | - | - |
| ManyWrapperFieldsMessage_WriteDelimitedMessagesToCodedOutputStream | 10 | 6,277.69 ns | 29.5858 ns | 26.2270 ns | 0.0076 | - | - | 64 B |
| ManyWrapperFieldsMessage_WriteDelimitedMessagesToSpan | 10 | 6,065.40 ns | 12.7225 ns | 10.6238 ns | - | - | - | - |
| ManyPrimitiveFieldsMessage_WriteDelimitedMessagesToCodedOutputStream | 10 | 2,949.21 ns | 7.4108 ns | 6.5695 ns | 0.0114 | - | - | 64 B |
| ManyPrimitiveFieldsMessage_WriteDelimitedMessagesToSpan | 10 | 2,820.45 ns | 11.6041 ns | 9.6899 ns | - | - | - | - |
| ManyWrapperFieldsMessage_WriteDelimitedMessagesToCodedOutputStream | 100 | 63,866.47 ns | 332.1800 ns | 310.7214 ns | - | - | - | 64 B |
| ManyWrapperFieldsMessage_WriteDelimitedMessagesToSpan | 100 | 62,805.46 ns | 331.8709 ns | 310.4323 ns | - | - | - | - |
| ManyPrimitiveFieldsMessage_WriteDelimitedMessagesToCodedOutputStream | 100 | 29,242.05 ns | 89.6671 ns | 83.8746 ns | - | - | - | 64 B |
| ManyPrimitiveFieldsMessage_WriteDelimitedMessagesToSpan | 100 | 28,088.34 ns | 116.2886 ns | 108.7764 ns | - | - | - | - |
AFTER 5
even fewer aggresive inlines
BenchmarkDotNet=v0.11.4, OS=debian rodete
Intel Xeon W-2135 CPU 3.70GHz, 1 CPU, 12 logical and 6 physical cores
.NET Core SDK=3.1.301
[Host] : .NET Core 2.1.16 (CoreCLR 4.6.28516.03, CoreFX 4.6.28516.10), 64bit RyuJIT
DefaultJob : .NET Core 2.1.16 (CoreCLR 4.6.28516.03, CoreFX 4.6.28516.10), 64bit RyuJIT
| Method | messageCount | Mean | Error | StdDev | Gen 0/1k Op | Gen 1/1k Op | Gen 2/1k Op | Allocated Memory/Op |
|--------------------------------------------------------------------- |------------- |-------------:|------------:|------------:|------------:|------------:|------------:|--------------------:|
| ManyWrapperFieldsMessage_ToByteArray | ? | 671.52 ns | 2.2028 ns | 2.0605 ns | 0.0420 | - | - | 184 B |
| ManyWrapperFieldsMessage_WriteToCodedOutputStream | ? | 407.79 ns | 1.6299 ns | 1.5246 ns | 0.0148 | - | - | 64 B |
| ManyWrapperFieldsMessage_WriteToSpan | ? | 390.88 ns | 1.2928 ns | 1.1461 ns | - | - | - | - |
| ManyPrimitiveFieldsMessage_ToByteArray | ? | 314.58 ns | 0.8290 ns | 0.7754 ns | 0.0386 | - | - | 168 B |
| ManyPrimitiveFieldsMessage_WriteToCodedOutputStream | ? | 234.19 ns | 1.4005 ns | 1.3101 ns | 0.0148 | - | - | 64 B |
| ManyPrimitiveFieldsMessage_WriteToSpan | ? | 215.09 ns | 0.7535 ns | 0.7048 ns | - | - | - | - |
| EmptyMessage_ToByteArray | ? | 44.02 ns | 0.0667 ns | 0.0624 ns | 0.0203 | - | - | 88 B |
| EmptyMessage_WriteToCodedOutputStream | ? | 35.49 ns | 0.3020 ns | 0.2522 ns | 0.0148 | - | - | 64 B |
| EmptyMessage_WriteToSpan | ? | 20.01 ns | 0.0949 ns | 0.0888 ns | - | - | - | - |
| ManyWrapperFieldsMessage_WriteDelimitedMessagesToCodedOutputStream | 10 | 6,423.72 ns | 30.0215 ns | 28.0821 ns | 0.0076 | - | - | 64 B |
| ManyWrapperFieldsMessage_WriteDelimitedMessagesToSpan | 10 | 6,231.03 ns | 34.4796 ns | 32.2522 ns | - | - | - | - |
| ManyPrimitiveFieldsMessage_WriteDelimitedMessagesToCodedOutputStream | 10 | 2,853.42 ns | 8.7815 ns | 8.2142 ns | 0.0114 | - | - | 64 B |
| ManyPrimitiveFieldsMessage_WriteDelimitedMessagesToSpan | 10 | 2,692.64 ns | 2.7710 ns | 2.3139 ns | - | - | - | - |
| ManyWrapperFieldsMessage_WriteDelimitedMessagesToCodedOutputStream | 100 | 64,368.54 ns | 687.6452 ns | 643.2237 ns | - | - | - | 64 B |
| ManyWrapperFieldsMessage_WriteDelimitedMessagesToSpan | 100 | 62,005.35 ns | 489.3248 ns | 457.7147 ns | - | - | - | - |
| ManyPrimitiveFieldsMessage_WriteDelimitedMessagesToCodedOutputStream | 100 | 28,194.85 ns | 100.0278 ns | 93.5660 ns | - | - | - | 64 B |
| ManyPrimitiveFieldsMessage_WriteDelimitedMessagesToSpan | 100 | 26,976.59 ns | 96.2450 ns | 90.0276 ns | - | - | - | - |
AFTER 6
BenchmarkDotNet=v0.11.4, OS=debian rodete
Intel Xeon W-2135 CPU 3.70GHz, 1 CPU, 12 logical and 6 physical cores
.NET Core SDK=3.1.301
[Host] : .NET Core 2.1.16 (CoreCLR 4.6.28516.03, CoreFX 4.6.28516.10), 64bit RyuJIT
DefaultJob : .NET Core 2.1.16 (CoreCLR 4.6.28516.03, CoreFX 4.6.28516.10), 64bit RyuJIT
| Method | messageCount | Mean | Error | StdDev | Gen 0/1k Op | Gen 1/1k Op | Gen 2/1k Op | Allocated Memory/Op |
|--------------------------------------------------------------------- |------------- |-------------:|------------:|------------:|------------:|------------:|------------:|--------------------:|
| ManyWrapperFieldsMessage_ToByteArray | ? | 694.09 ns | 3.3059 ns | 2.9306 ns | 0.0420 | - | - | 184 B |
| ManyWrapperFieldsMessage_WriteToCodedOutputStream | ? | 432.27 ns | 2.3747 ns | 2.1051 ns | 0.0148 | - | - | 64 B |
| ManyWrapperFieldsMessage_WriteToSpan | ? | 409.50 ns | 2.1330 ns | 1.9952 ns | - | - | - | - |
| ManyPrimitiveFieldsMessage_ToByteArray | ? | 297.40 ns | 1.2172 ns | 1.0164 ns | 0.0386 | - | - | 168 B |
| ManyPrimitiveFieldsMessage_WriteToCodedOutputStream | ? | 218.74 ns | 0.9156 ns | 0.8564 ns | 0.0148 | - | - | 64 B |
| ManyPrimitiveFieldsMessage_WriteToSpan | ? | 200.31 ns | 0.7385 ns | 0.6908 ns | - | - | - | - |
| EmptyMessage_ToByteArray | ? | 43.89 ns | 0.0784 ns | 0.0612 ns | 0.0203 | - | - | 88 B |
| EmptyMessage_WriteToCodedOutputStream | ? | 35.38 ns | 0.0635 ns | 0.0563 ns | 0.0148 | - | - | 64 B |
| EmptyMessage_WriteToSpan | ? | 20.10 ns | 0.0695 ns | 0.0616 ns | - | - | - | - |
| ManyWrapperFieldsMessage_WriteDelimitedMessagesToCodedOutputStream | 10 | 6,429.00 ns | 33.7908 ns | 29.9547 ns | 0.0076 | - | - | 64 B |
| ManyWrapperFieldsMessage_WriteDelimitedMessagesToSpan | 10 | 6,469.08 ns | 26.3803 ns | 22.0287 ns | - | - | - | - |
| ManyPrimitiveFieldsMessage_WriteDelimitedMessagesToCodedOutputStream | 10 | 2,729.02 ns | 7.6427 ns | 7.1490 ns | 0.0114 | - | - | 64 B |
| ManyPrimitiveFieldsMessage_WriteDelimitedMessagesToSpan | 10 | 2,585.23 ns | 8.8748 ns | 8.3015 ns | - | - | - | - |
| ManyWrapperFieldsMessage_WriteDelimitedMessagesToCodedOutputStream | 100 | 64,857.99 ns | 339.9626 ns | 301.3680 ns | - | - | - | 64 B |
| ManyWrapperFieldsMessage_WriteDelimitedMessagesToSpan | 100 | 64,775.08 ns | 285.7427 ns | 267.2839 ns | - | - | - | - |
| ManyPrimitiveFieldsMessage_WriteDelimitedMessagesToCodedOutputStream | 100 | 27,169.55 ns | 111.1761 ns | 98.5547 ns | - | - | - | 64 B |
| ManyPrimitiveFieldsMessage_WriteDelimitedMessagesToSpan | 100 | 25,827.09 ns | 105.3008 ns | 93.3464 ns | - | - | - | - |
AFTER 6
Primitives
BenchmarkDotNet=v0.11.4, OS=debian rodete
Intel Xeon W-2135 CPU 3.70GHz, 1 CPU, 12 logical and 6 physical cores
.NET Core SDK=3.1.301
[Host] : .NET Core 2.1.16 (CoreCLR 4.6.28516.03, CoreFX 4.6.28516.10), 64bit RyuJIT
DefaultJob : .NET Core 2.1.16 (CoreCLR 4.6.28516.03, CoreFX 4.6.28516.10), 64bit RyuJIT
| Method | BytesToWrite | encodedSize | Mean | Error | StdDev | Gen 0/1k Op | Gen 1/1k Op | Gen 2/1k Op | Allocated Memory/Op |
|-------------------------------------- |------------- |------------ |-------------:|------------:|------------:|------------:|------------:|------------:|--------------------:|
| WriteRawVarint32_CodedOutputStream | 10080 | 1 | 29,214.5 ns | 144.8651 ns | 113.1012 ns | - | - | - | 64 B |
| WriteRawVarint32_WriteContext | 10080 | 1 | 33,620.2 ns | 138.4644 ns | 129.5197 ns | - | - | - | - |
| WriteRawVarint64_CodedOutputStream | 10080 | 1 | 37,047.4 ns | 61.5313 ns | 51.3814 ns | - | - | - | 64 B |
| WriteRawVarint64_WriteContext | 10080 | 1 | 31,251.8 ns | 258.7711 ns | 242.0546 ns | - | - | - | - |
| WriteString_CodedOutputStream | 10080 | 1 | 177,444.9 ns | 786.5254 ns | 697.2343 ns | - | - | - | 64 B |
| WriteString_WriteContext | 10080 | 1 | 181,243.6 ns | 152.8213 ns | 119.3128 ns | - | - | - | - |
| WriteBytes_CodedOutputStream | 10080 | 1 | 215,341.7 ns | 751.5175 ns | 702.9699 ns | - | - | - | 64 B |
| WriteBytes_WriteContext | 10080 | 1 | 210,417.5 ns | 783.0076 ns | 611.3209 ns | - | - | - | - |
| WriteRawVarint32_CodedOutputStream | 10080 | 2 | 23,522.0 ns | 120.1829 ns | 100.3581 ns | - | - | - | 64 B |
| WriteRawVarint32_WriteContext | 10080 | 2 | 18,564.1 ns | 148.2530 ns | 138.6760 ns | - | - | - | - |
| WriteRawVarint64_CodedOutputStream | 10080 | 2 | 22,436.5 ns | 166.4595 ns | 147.5620 ns | - | - | - | 64 B |
| WriteRawVarint64_WriteContext | 10080 | 2 | 20,432.1 ns | 73.4711 ns | 68.7249 ns | - | - | - | - |
| WriteRawVarint32_CodedOutputStream | 10080 | 3 | 19,568.0 ns | 46.5115 ns | 43.5069 ns | - | - | - | 64 B |
| WriteRawVarint32_WriteContext | 10080 | 3 | 17,607.3 ns | 48.6527 ns | 45.5098 ns | - | - | - | - |
| WriteRawVarint64_CodedOutputStream | 10080 | 3 | 21,053.7 ns | 20.2564 ns | 16.9150 ns | - | - | - | 64 B |
| WriteRawVarint64_WriteContext | 10080 | 3 | 17,069.0 ns | 86.0665 ns | 80.5067 ns | - | - | - | - |
| WriteRawVarint32_CodedOutputStream | 10080 | 4 | 17,604.8 ns | 109.3414 ns | 102.2781 ns | - | - | - | 64 B |
| WriteRawVarint32_WriteContext | 10080 | 4 | 16,828.4 ns | 73.7020 ns | 65.3349 ns | - | - | - | - |
| WriteRawVarint64_CodedOutputStream | 10080 | 4 | 18,261.2 ns | 94.7543 ns | 88.6332 ns | - | - | - | 64 B |
| WriteRawVarint64_WriteContext | 10080 | 4 | 15,701.7 ns | 122.2417 ns | 114.3450 ns | - | - | - | - |
| WriteString_CodedOutputStream | 10080 | 4 | 58,810.7 ns | 314.0158 ns | 293.7305 ns | - | - | - | 64 B |
| WriteString_WriteContext | 10080 | 4 | 59,357.5 ns | 285.7101 ns | 267.2534 ns | - | - | - | - |
| WriteNonAsciiString_CodedOutputStream | 10080 | 4 | 80,599.8 ns | 296.2012 ns | 262.5746 ns | - | - | - | 64 B |
| WriteNonAsciiString_WriteContext | 10080 | 4 | 81,470.1 ns | 289.6988 ns | 270.9844 ns | - | - | - | - |
| WriteBytes_CodedOutputStream | 10080 | 4 | 54,903.1 ns | 147.4865 ns | 137.9589 ns | - | - | - | 64 B |
| WriteBytes_WriteContext | 10080 | 4 | 53,954.2 ns | 199.8591 ns | 177.1699 ns | - | - | - | - |
| WriteRawVarint32_CodedOutputStream | 10080 | 5 | 16,923.3 ns | 111.5598 ns | 104.3531 ns | - | - | - | 64 B |
| WriteRawVarint32_WriteContext | 10080 | 5 | 16,675.3 ns | 62.6333 ns | 58.5873 ns | - | - | - | - |
| WriteRawVarint64_CodedOutputStream | 10080 | 5 | 18,084.8 ns | 53.8660 ns | 50.3863 ns | - | - | - | 64 B |
| WriteRawVarint64_WriteContext | 10080 | 5 | 14,822.5 ns | 71.3556 ns | 66.7461 ns | - | - | - | - |
| WriteRawVarint64_CodedOutputStream | 10080 | 6 | 17,747.1 ns | 20.3528 ns | 18.0422 ns | - | - | - | 64 B |
| WriteRawVarint64_WriteContext | 10080 | 6 | 14,372.9 ns | 71.9195 ns | 67.2736 ns | - | - | - | - |
| WriteRawVarint64_CodedOutputStream | 10080 | 7 | 17,266.4 ns | 54.0875 ns | 50.5935 ns | - | - | - | 64 B |
| WriteRawVarint64_WriteContext | 10080 | 7 | 14,028.4 ns | 69.7302 ns | 65.2257 ns | - | - | - | - |
| WriteRawVarint64_CodedOutputStream | 10080 | 8 | 17,321.1 ns | 9.9686 ns | 8.8369 ns | - | - | - | 64 B |
| WriteRawVarint64_WriteContext | 10080 | 8 | 13,843.1 ns | 73.8391 ns | 69.0691 ns | - | - | - | - |
| WriteRawVarint64_CodedOutputStream | 10080 | 9 | 16,902.8 ns | 64.6378 ns | 60.4623 ns | - | - | - | 64 B |
| WriteRawVarint64_WriteContext | 10080 | 9 | 13,649.2 ns | 72.0484 ns | 67.3941 ns | - | - | - | - |
| WriteRawVarint64_CodedOutputStream | 10080 | 10 | 17,006.3 ns | 97.2806 ns | 90.9964 ns | - | - | - | 64 B |
| WriteRawVarint64_WriteContext | 10080 | 10 | 14,275.0 ns | 59.3585 ns | 52.6198 ns | - | - | - | - |
| WriteString_CodedOutputStream | 10080 | 10 | 32,759.9 ns | 182.0413 ns | 161.3749 ns | - | - | - | 64 B |
| WriteString_WriteContext | 10080 | 10 | 31,407.7 ns | 232.7208 ns | 217.6872 ns | - | - | - | - |
| WriteNonAsciiString_CodedOutputStream | 10080 | 10 | 50,376.0 ns | 711.6319 ns | 630.8432 ns | - | - | - | 64 B |
| WriteNonAsciiString_WriteContext | 10080 | 10 | 51,101.4 ns | 220.1264 ns | 205.9064 ns | - | - | - | - |
| WriteBytes_CodedOutputStream | 10080 | 10 | 22,083.4 ns | 60.5528 ns | 56.6411 ns | - | - | - | 64 B |
| WriteBytes_WriteContext | 10080 | 10 | 21,413.4 ns | 85.4500 ns | 75.7492 ns | - | - | - | - |
| WriteString_CodedOutputStream | 10080 | 105 | 13,731.7 ns | 43.2930 ns | 40.4963 ns | - | - | - | 64 B |
| WriteString_WriteContext | 10080 | 105 | 10,530.0 ns | 20.7141 ns | 18.3625 ns | - | - | - | - |
| WriteNonAsciiString_CodedOutputStream | 10080 | 105 | 19,927.6 ns | 40.9500 ns | 38.3047 ns | - | - | - | 64 B |
| WriteNonAsciiString_WriteContext | 10080 | 105 | 19,829.6 ns | 71.9427 ns | 67.2952 ns | - | - | - | - |
| WriteBytes_CodedOutputStream | 10080 | 105 | 2,253.7 ns | 7.6118 ns | 7.1201 ns | 0.0114 | - | - | 64 B |
| WriteBytes_WriteContext | 10080 | 105 | 2,199.1 ns | 6.1791 ns | 5.7799 ns | - | - | - | - |
| WriteString_CodedOutputStream | 10080 | 10080 | 11,052.7 ns | 36.7292 ns | 34.3565 ns | - | - | - | 64 B |
| WriteString_WriteContext | 10080 | 10080 | 7,834.2 ns | 50.0915 ns | 46.8556 ns | - | - | - | - |
| WriteNonAsciiString_CodedOutputStream | 10080 | 10080 | 17,106.6 ns | 35.5642 ns | 33.2668 ns | - | - | - | 64 B |
| WriteNonAsciiString_WriteContext | 10080 | 10080 | 17,087.4 ns | 59.8954 ns | 56.0262 ns | - | - | - | - |
| WriteBytes_CodedOutputStream | 10080 | 10080 | 126.8 ns | 0.9330 ns | 0.8727 ns | 0.0148 | - | - | 64 B |
| WriteBytes_WriteContext | 10080 | 10080 | 122.7 ns | 2.4490 ns | 4.3531 ns | - | - | - | - |
| WriteFixed32_CodedOutputStream | 10080 | ? | 10,616.2 ns | 69.6670 ns | 65.1665 ns | - | - | - | 64 B |
| WriteFixed32_WriteContext | 10080 | ? | 7,165.3 ns | 34.3775 ns | 30.4747 ns | - | - | - | - |
| WriteFixed64_CodedOutputStream | 10080 | ? | 14,109.2 ns | 43.6778 ns | 40.8562 ns | - | - | - | 64 B |
| WriteFixed64_WriteContext | 10080 | ? | 14,520.3 ns | 35.6471 ns | 33.3443 ns | - | - | - | - |
| WriteRawFloat_CodedOutputStream | 10080 | ? | 4,874.5 ns | 5.2332 ns | 4.8951 ns | 0.0076 | - | - | 64 B |
| WriteRawFloat_WriteContext | 10080 | ? | 5,350.2 ns | 14.7174 ns | 13.0466 ns | - | - | - | - |
| WriteRawDouble_CodedOutputStream | 10080 | ? | 15,946.8 ns | 45.9893 ns | 43.0184 ns | - | - | - | 64 B |
| WriteRawDouble_WriteContext | 10080 | ? | 15,409.1 ns | 73.4858 ns | 65.1432 ns | - | - | - | - |
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment