Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save jtattermusch/2d8cc4eab54a53de1079132495d3f55d to your computer and use it in GitHub Desktop.
Save jtattermusch/2d8cc4eab54a53de1079132495d3f55d to your computer and use it in GitHub Desktop.
WriteRawPrimitivesBenchmark
======================
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 | BytesToWrite | encodedSize | Mean | Error | StdDev | Gen 0/1k Op | Gen 1/1k Op | Gen 2/1k Op | Allocated Memory/Op |
|-------------------------------------- |------------- |------------ |--------------:|------------:|------------:|------------:|------------:|------------:|--------------------:|
| WriteRawVarint32_CodedOutputStream | 10080 | 1 | 26,224.86 ns | 124.3306 ns | 116.2989 ns | - | - | - | 48 B |
| WriteRawVarint64_CodedOutputStream | 10080 | 1 | 26,076.52 ns | 114.3703 ns | 106.9820 ns | - | - | - | 48 B |
| WriteString_CodedOutputStream | 10080 | 1 | 105,722.48 ns | 586.8462 ns | 548.9363 ns | - | - | - | 48 B |
| WriteBytes_CodedOutputStream | 10080 | 1 | 60,862.84 ns | 797.7619 ns | 746.2269 ns | - | - | - | 48 B |
| WriteRawVarint32_CodedOutputStream | 10080 | 2 | 16,174.04 ns | 86.6710 ns | 81.0721 ns | - | - | - | 48 B |
| WriteRawVarint64_CodedOutputStream | 10080 | 2 | 16,999.60 ns | 72.3190 ns | 64.1089 ns | - | - | - | 48 B |
| WriteRawVarint32_CodedOutputStream | 10080 | 3 | 14,065.71 ns | 54.5983 ns | 51.0713 ns | - | - | - | 48 B |
| WriteRawVarint64_CodedOutputStream | 10080 | 3 | 15,354.57 ns | 156.6428 ns | 146.5238 ns | - | - | - | 48 B |
| WriteRawVarint32_CodedOutputStream | 10080 | 4 | 13,781.91 ns | 50.2346 ns | 46.9894 ns | - | - | - | 48 B |
| WriteRawVarint64_CodedOutputStream | 10080 | 4 | 13,650.54 ns | 45.7907 ns | 42.8327 ns | - | - | - | 48 B |
| WriteString_CodedOutputStream | 10080 | 4 | 41,644.09 ns | 143.3208 ns | 127.0502 ns | - | - | - | 48 B |
| WriteNonAsciiString_CodedOutputStream | 10080 | 4 | 64,640.96 ns | 449.6782 ns | 420.6292 ns | - | - | - | 48 B |
| WriteBytes_CodedOutputStream | 10080 | 4 | 20,446.55 ns | 79.4786 ns | 74.3444 ns | - | - | - | 48 B |
| WriteRawVarint32_CodedOutputStream | 10080 | 5 | 13,720.96 ns | 38.4527 ns | 35.9687 ns | - | - | - | 48 B |
| WriteRawVarint64_CodedOutputStream | 10080 | 5 | 13,938.84 ns | 45.5787 ns | 42.6344 ns | - | - | - | 48 B |
| WriteRawVarint64_CodedOutputStream | 10080 | 6 | 13,050.46 ns | 45.0409 ns | 42.1313 ns | - | - | - | 48 B |
| WriteRawVarint64_CodedOutputStream | 10080 | 7 | 13,451.22 ns | 45.4609 ns | 42.5241 ns | - | - | - | 48 B |
| WriteRawVarint64_CodedOutputStream | 10080 | 8 | 12,844.66 ns | 46.1704 ns | 43.1878 ns | - | - | - | 48 B |
| WriteRawVarint64_CodedOutputStream | 10080 | 9 | 12,974.64 ns | 41.1985 ns | 38.5371 ns | - | - | - | 48 B |
| WriteRawVarint64_CodedOutputStream | 10080 | 10 | 12,713.23 ns | 43.6364 ns | 38.6825 ns | - | - | - | 48 B |
| WriteString_CodedOutputStream | 10080 | 10 | 26,036.64 ns | 118.9628 ns | 111.2779 ns | - | - | - | 48 B |
| WriteNonAsciiString_CodedOutputStream | 10080 | 10 | 44,150.67 ns | 148.9505 ns | 124.3804 ns | - | - | - | 48 B |
| WriteBytes_CodedOutputStream | 10080 | 10 | 13,843.81 ns | 78.0303 ns | 72.9896 ns | - | - | - | 48 B |
| WriteString_CodedOutputStream | 10080 | 105 | 13,150.48 ns | 50.6181 ns | 47.3482 ns | - | - | - | 48 B |
| WriteNonAsciiString_CodedOutputStream | 10080 | 105 | 19,178.98 ns | 30.8112 ns | 28.8208 ns | - | - | - | 48 B |
| WriteBytes_CodedOutputStream | 10080 | 105 | 1,230.49 ns | 2.1277 ns | 1.8862 ns | 0.0095 | - | - | 48 B |
| WriteString_CodedOutputStream | 10080 | 10080 | 10,988.87 ns | 22.2522 ns | 18.5816 ns | - | - | - | 48 B |
| WriteNonAsciiString_CodedOutputStream | 10080 | 10080 | 17,094.91 ns | 75.6482 ns | 70.7614 ns | - | - | - | 48 B |
| WriteBytes_CodedOutputStream | 10080 | 10080 | 99.78 ns | 0.3701 ns | 0.3462 ns | 0.0111 | - | - | 48 B |
| WriteFixed32_CodedOutputStream | 10080 | ? | 10,770.79 ns | 8.7767 ns | 7.3289 ns | - | - | - | 48 B |
| WriteFixed64_CodedOutputStream | 10080 | ? | 10,100.08 ns | 25.6558 ns | 23.9985 ns | - | - | - | 48 B |
| WriteRawFloat_CodedOutputStream | 10080 | ? | 27,768.21 ns | 126.2234 ns | 118.0695 ns | 18.6462 | - | - | 80688 B |
| WriteRawDouble_CodedOutputStream | 10080 | ? | 9,145.25 ns | 9.2604 ns | 8.2091 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 | BytesToWrite | encodedSize | Mean | Error | StdDev | Gen 0/1k Op | Gen 1/1k Op | Gen 2/1k Op | Allocated Memory/Op |
|-------------------------------------- |------------- |------------ |------------:|-----------:|------------:|------------:|------------:|------------:|--------------------:|
| WriteRawVarint32_CodedOutputStream | 10080 | 1 | 15,365.5 ns | 98.310 ns | 91.9591 ns | - | - | - | 64 B |
| WriteRawVarint32_WriteContext | 10080 | 1 | 16,825.6 ns | 88.309 ns | 82.6046 ns | - | - | - | - |
| WriteRawVarint64_CodedOutputStream | 10080 | 1 | 23,698.5 ns | 80.026 ns | 74.8565 ns | - | - | - | 64 B |
| WriteRawVarint64_WriteContext | 10080 | 1 | 21,353.3 ns | 37.460 ns | 33.2076 ns | - | - | - | - |
| WriteString_CodedOutputStream | 10080 | 1 | 90,434.1 ns | 113.871 ns | 88.9030 ns | - | - | - | 64 B |
| WriteString_WriteContext | 10080 | 1 | 83,414.3 ns | 108.882 ns | 90.9212 ns | - | - | - | - |
| WriteBytes_CodedOutputStream | 10080 | 1 | 67,194.8 ns | 266.438 ns | 236.1901 ns | - | - | - | 64 B |
| WriteBytes_WriteContext | 10080 | 1 | 71,673.9 ns | 313.891 ns | 293.6141 ns | - | - | - | - |
| WriteRawVarint32_CodedOutputStream | 10080 | 2 | 17,312.9 ns | 246.753 ns | 230.8132 ns | - | - | - | 64 B |
| WriteRawVarint32_WriteContext | 10080 | 2 | 16,613.5 ns | 74.560 ns | 58.2117 ns | - | - | - | - |
| WriteRawVarint64_CodedOutputStream | 10080 | 2 | 15,924.3 ns | 119.841 ns | 112.0990 ns | - | - | - | 64 B |
| WriteRawVarint64_WriteContext | 10080 | 2 | 19,058.0 ns | 154.788 ns | 129.2548 ns | - | - | - | - |
| WriteRawVarint32_CodedOutputStream | 10080 | 3 | 16,532.5 ns | 347.394 ns | 413.5477 ns | - | - | - | 64 B |
| WriteRawVarint32_WriteContext | 10080 | 3 | 16,384.1 ns | 66.211 ns | 58.6941 ns | - | - | - | - |
| WriteRawVarint64_CodedOutputStream | 10080 | 3 | 15,426.4 ns | 84.616 ns | 79.1494 ns | - | - | - | 64 B |
| WriteRawVarint64_WriteContext | 10080 | 3 | 17,613.3 ns | 24.536 ns | 22.9510 ns | - | - | - | - |
| WriteRawVarint32_CodedOutputStream | 10080 | 4 | 15,776.6 ns | 119.816 ns | 112.0757 ns | - | - | - | 64 B |
| WriteRawVarint32_WriteContext | 10080 | 4 | 16,895.1 ns | 36.098 ns | 33.7662 ns | - | - | - | - |
| WriteRawVarint64_CodedOutputStream | 10080 | 4 | 16,177.6 ns | 105.924 ns | 99.0811 ns | - | - | - | 64 B |
| WriteRawVarint64_WriteContext | 10080 | 4 | 16,721.5 ns | 119.591 ns | 111.8653 ns | - | - | - | - |
| WriteString_CodedOutputStream | 10080 | 4 | 36,509.1 ns | 251.768 ns | 235.5043 ns | - | - | - | 64 B |
| WriteString_WriteContext | 10080 | 4 | 38,282.5 ns | 158.523 ns | 140.5265 ns | - | - | - | - |
| WriteNonAsciiString_CodedOutputStream | 10080 | 4 | 57,555.2 ns | 373.533 ns | 349.4027 ns | - | - | - | 64 B |
| WriteNonAsciiString_WriteContext | 10080 | 4 | 55,936.2 ns | 327.997 ns | 306.8089 ns | - | - | - | - |
| WriteBytes_CodedOutputStream | 10080 | 4 | 18,369.1 ns | 296.482 ns | 247.5760 ns | - | - | - | 64 B |
| WriteBytes_WriteContext | 10080 | 4 | 19,313.7 ns | 43.606 ns | 38.6551 ns | - | - | - | - |
| WriteRawVarint32_CodedOutputStream | 10080 | 5 | 15,822.1 ns | 91.665 ns | 85.7432 ns | - | - | - | 64 B |
| WriteRawVarint32_WriteContext | 10080 | 5 | 17,367.6 ns | 15.464 ns | 14.4653 ns | - | - | - | - |
| WriteRawVarint64_CodedOutputStream | 10080 | 5 | 15,978.2 ns | 109.978 ns | 102.8737 ns | - | - | - | 64 B |
| WriteRawVarint64_WriteContext | 10080 | 5 | 16,269.6 ns | 99.981 ns | 88.6309 ns | - | - | - | - |
| WriteRawVarint64_CodedOutputStream | 10080 | 6 | 16,043.6 ns | 55.970 ns | 49.6155 ns | - | - | - | 64 B |
| WriteRawVarint64_WriteContext | 10080 | 6 | 15,979.9 ns | 98.491 ns | 92.1284 ns | - | - | - | - |
| WriteRawVarint64_CodedOutputStream | 10080 | 7 | 15,958.4 ns | 67.852 ns | 63.4684 ns | - | - | - | 64 B |
| WriteRawVarint64_WriteContext | 10080 | 7 | 15,716.5 ns | 81.093 ns | 75.8546 ns | - | - | - | - |
| WriteRawVarint64_CodedOutputStream | 10080 | 8 | 15,988.6 ns | 81.716 ns | 76.4370 ns | - | - | - | 64 B |
| WriteRawVarint64_WriteContext | 10080 | 8 | 15,666.7 ns | 85.469 ns | 71.3704 ns | - | - | - | - |
| WriteRawVarint64_CodedOutputStream | 10080 | 9 | 15,903.9 ns | 91.782 ns | 85.8531 ns | - | - | - | 64 B |
| WriteRawVarint64_WriteContext | 10080 | 9 | 15,423.3 ns | 79.520 ns | 74.3833 ns | - | - | - | - |
| WriteRawVarint64_CodedOutputStream | 10080 | 10 | 15,848.5 ns | 62.327 ns | 58.3010 ns | - | - | - | 64 B |
| WriteRawVarint64_WriteContext | 10080 | 10 | 15,321.6 ns | 84.491 ns | 79.0333 ns | - | - | - | - |
| WriteString_CodedOutputStream | 10080 | 10 | 23,090.8 ns | 81.592 ns | 72.3289 ns | - | - | - | 64 B |
| WriteString_WriteContext | 10080 | 10 | 26,313.4 ns | 105.989 ns | 99.1423 ns | - | - | - | - |
| WriteNonAsciiString_CodedOutputStream | 10080 | 10 | 41,391.8 ns | 231.314 ns | 216.3716 ns | - | - | - | 64 B |
| WriteNonAsciiString_WriteContext | 10080 | 10 | 41,345.3 ns | 57.107 ns | 50.6234 ns | - | - | - | - |
| WriteBytes_CodedOutputStream | 10080 | 10 | 7,115.7 ns | 44.504 ns | 41.6289 ns | 0.0076 | - | - | 64 B |
| WriteBytes_WriteContext | 10080 | 10 | 7,086.8 ns | 27.669 ns | 25.8817 ns | - | - | - | - |
| WriteString_CodedOutputStream | 10080 | 105 | 10,754.0 ns | 41.369 ns | 38.6970 ns | - | - | - | 64 B |
| WriteString_WriteContext | 10080 | 105 | 15,281.2 ns | 98.452 ns | 92.0917 ns | - | - | - | - |
| WriteNonAsciiString_CodedOutputStream | 10080 | 105 | 19,074.6 ns | 95.143 ns | 88.9965 ns | - | - | - | 64 B |
| WriteNonAsciiString_WriteContext | 10080 | 105 | 18,894.5 ns | 60.751 ns | 50.7296 ns | - | - | - | - |
| WriteBytes_CodedOutputStream | 10080 | 105 | 890.7 ns | 3.252 ns | 2.8827 ns | 0.0143 | - | - | 64 B |
| WriteBytes_WriteContext | 10080 | 105 | 866.1 ns | 3.406 ns | 3.1860 ns | - | - | - | - |
| WriteString_CodedOutputStream | 10080 | 10080 | 8,772.7 ns | 33.995 ns | 30.1353 ns | - | - | - | 64 B |
| WriteString_WriteContext | 10080 | 10080 | 13,336.9 ns | 51.506 ns | 48.1785 ns | - | - | - | - |
| WriteNonAsciiString_CodedOutputStream | 10080 | 10080 | 17,094.6 ns | 31.539 ns | 29.5018 ns | - | - | - | 64 B |
| WriteNonAsciiString_WriteContext | 10080 | 10080 | 17,065.9 ns | 62.470 ns | 58.4346 ns | - | - | - | - |
| WriteBytes_CodedOutputStream | 10080 | 10080 | 119.3 ns | 1.084 ns | 1.0140 ns | 0.0148 | - | - | 64 B |
| WriteBytes_WriteContext | 10080 | 10080 | 103.7 ns | 1.064 ns | 0.8888 ns | - | - | - | - |
| WriteFixed32_CodedOutputStream | 10080 | ? | 33,217.9 ns | 98.961 ns | 87.7264 ns | - | - | - | 64 B |
| WriteFixed32_WriteContext | 10080 | ? | 5,416.5 ns | 13.900 ns | 12.3223 ns | - | - | - | - |
| WriteFixed64_CodedOutputStream | 10080 | ? | 12,122.5 ns | 30.183 ns | 28.2337 ns | - | - | - | 64 B |
| WriteFixed64_WriteContext | 10080 | ? | 14,482.3 ns | 23.251 ns | 21.7494 ns | - | - | - | - |
| WriteRawFloat_CodedOutputStream | 10080 | ? | 5,986.5 ns | 26.202 ns | 23.2271 ns | 0.0076 | - | - | 64 B |
| WriteRawFloat_WriteContext | 10080 | ? | 5,867.6 ns | 10.273 ns | 9.6096 ns | - | - | - | - |
| WriteRawDouble_CodedOutputStream | 10080 | ? | 12,953.9 ns | 36.001 ns | 33.6756 ns | - | - | - | 64 B |
| WriteRawDouble_WriteContext | 10080 | ? | 11,646.0 ns | 7.249 ns | 5.6595 ns | - | - | - | - |
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 | ? | 831.39 ns | 4.2796 ns | 4.0031 ns | 0.0420 | - | - | 184 B |
| ManyWrapperFieldsMessage_WriteToCodedOutputStream | ? | 558.40 ns | 1.8008 ns | 1.6844 ns | 0.0143 | - | - | 64 B |
| ManyWrapperFieldsMessage_WriteToSpan | ? | 532.54 ns | 2.6327 ns | 2.4626 ns | - | - | - | - |
| ManyPrimitiveFieldsMessage_ToByteArray | ? | 509.77 ns | 3.1419 ns | 2.6236 ns | 0.0381 | - | - | 168 B |
| ManyPrimitiveFieldsMessage_WriteToCodedOutputStream | ? | 425.02 ns | 2.0286 ns | 1.7983 ns | 0.0148 | - | - | 64 B |
| ManyPrimitiveFieldsMessage_WriteToSpan | ? | 404.65 ns | 1.6775 ns | 1.4870 ns | - | - | - | - |
| EmptyMessage_ToByteArray | ? | 44.57 ns | 0.2938 ns | 0.2748 ns | 0.0203 | - | - | 88 B |
| EmptyMessage_WriteToCodedOutputStream | ? | 34.83 ns | 0.1443 ns | 0.1350 ns | 0.0148 | - | - | 64 B |
| EmptyMessage_WriteToSpan | ? | 19.97 ns | 0.1012 ns | 0.0897 ns | - | - | - | - |
| ManyWrapperFieldsMessage_WriteDelimitedMessagesToCodedOutputStream | 10 | 7,929.93 ns | 40.6800 ns | 38.0521 ns | - | - | - | 64 B |
| ManyWrapperFieldsMessage_WriteDelimitedMessagesToSpan | 10 | 7,717.74 ns | 51.0772 ns | 45.2786 ns | - | - | - | - |
| ManyPrimitiveFieldsMessage_WriteDelimitedMessagesToCodedOutputStream | 10 | 4,718.61 ns | 14.6429 ns | 12.9806 ns | 0.0076 | - | - | 64 B |
| ManyPrimitiveFieldsMessage_WriteDelimitedMessagesToSpan | 10 | 4,602.24 ns | 32.6429 ns | 27.2583 ns | - | - | - | - |
| ManyWrapperFieldsMessage_WriteDelimitedMessagesToCodedOutputStream | 100 | 78,448.29 ns | 305.5643 ns | 285.8250 ns | - | - | - | 64 B |
| ManyWrapperFieldsMessage_WriteDelimitedMessagesToSpan | 100 | 77,049.01 ns | 199.9720 ns | 187.0539 ns | - | - | - | - |
| ManyPrimitiveFieldsMessage_WriteDelimitedMessagesToCodedOutputStream | 100 | 46,938.33 ns | 160.6529 ns | 134.1524 ns | - | - | - | 64 B |
| ManyPrimitiveFieldsMessage_WriteDelimitedMessagesToSpan | 100 | 45,742.65 ns | 72.8454 ns | 64.5756 ns | - | - | - | - |
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment