mgravell / Pipelines.Sockets.Unofficial

.NET managed sockets wrapper using the new "Pipelines" API
Other
412 stars 54 forks source link

Array pool memory stream #48

Closed mgravell closed 4 years ago

mgravell commented 4 years ago

Provides something similar to MemoryStream, but which loans memory from the array-pool; for sizes up to the pool's upper limit, this improves allocations and performance; for sizes over the pool's upper limit, it tracks MemoryStream for perf etc

Method Runtime Bytes Mean Error StdDev Median Ratio RatioSD Gen 0 Gen 1 Gen 2 Allocated
MemoryStream .NET 4.7.2 0 1,364.23 ns 45.405 ns 52.289 ns 1,346.64 ns 1.00 0.00 0.1926 - - 1220 B
ArrayPoolStream .NET 4.7.2 0 1,614.82 ns 13.611 ns 12.066 ns 1,615.72 ns 1.18 0.05 0.2747 - - 1733 B
MemoryStream .NET Core 3.1 0 39.54 ns 0.515 ns 0.481 ns 39.43 ns 1.00 0.00 0.0086 - - 72 B
ArrayPoolStream .NET Core 3.1 0 39.91 ns 0.507 ns 0.474 ns 39.93 ns 1.01 0.02 0.0076 - - 64 B
MemoryStream .NET 4.7.2 100 1,386.19 ns 15.762 ns 14.744 ns 1,386.67 ns 1.00 0.00 0.2365 - - 1500 B
ArrayPoolStream .NET 4.7.2 100 1,676.58 ns 9.549 ns 7.974 ns 1,678.43 ns 1.21 0.02 0.2747 - - 1733 B
MemoryStream .NET Core 3.1 100 71.54 ns 0.752 ns 0.703 ns 71.60 ns 1.00 0.00 0.0421 - - 352 B
ArrayPoolStream .NET Core 3.1 100 82.56 ns 0.901 ns 0.843 ns 82.53 ns 1.15 0.02 0.0076 - - 64 B
MemoryStream .NET 4.7.2 1000 1,466.98 ns 21.271 ns 19.897 ns 1,468.47 ns 1.00 0.00 0.3548 - - 2247 B
ArrayPoolStream .NET 4.7.2 1000 1,792.64 ns 34.731 ns 39.997 ns 1,787.87 ns 1.23 0.04 0.2747 - - 1733 B
MemoryStream .NET Core 3.1 1000 115.68 ns 1.286 ns 1.140 ns 115.27 ns 1.00 0.00 0.1310 0.0005 - 1096 B
ArrayPoolStream .NET Core 3.1 1000 94.71 ns 1.528 ns 1.430 ns 94.73 ns 0.82 0.01 0.0076 - - 64 B
MemoryStream .NET 4.7.2 10000 3,385.81 ns 26.918 ns 25.179 ns 3,385.13 ns 1.00 0.00 5.1003 0.3891 - 32114 B
ArrayPoolStream .NET 4.7.2 10000 2,396.58 ns 17.707 ns 16.563 ns 2,403.06 ns 0.71 0.01 0.2708 - - 1733 B
MemoryStream .NET Core 3.1 10000 1,921.56 ns 35.086 ns 31.103 ns 1,919.78 ns 1.00 0.00 3.6888 0.2136 - 30889 B
ArrayPoolStream .NET Core 3.1 10000 558.52 ns 11.145 ns 26.702 ns 543.93 ns 0.31 0.01 0.0076 - - 64 B
MemoryStream .NET 4.7.2 100000 48,543.91 ns 479.858 ns 448.859 ns 48,461.05 ns 1.00 0.00 41.6260 41.6260 41.6260 261678 B
ArrayPoolStream .NET 4.7.2 100000 7,116.44 ns 84.081 ns 78.650 ns 7,098.91 ns 0.15 0.00 0.2670 - - 1733 B
MemoryStream .NET Core 3.1 100000 46,856.50 ns 283.722 ns 251.512 ns 46,798.32 ns 1.00 0.00 41.6260 41.6260 41.6260 260351 B
ArrayPoolStream .NET Core 3.1 100000 4,469.42 ns 39.937 ns 37.357 ns 4,472.42 ns 0.10 0.00 0.0076 - - 64 B
MemoryStream .NET 4.7.2 1000000 663,115.10 ns 5,952.064 ns 5,567.564 ns 663,140.04 ns 1.00 0.00 499.0234 499.0234 499.0234 2097440 B
ArrayPoolStream .NET 4.7.2 1000000 59,805.30 ns 876.384 ns 819.771 ns 60,177.60 ns 0.09 0.00 0.1221 - - 1734 B
MemoryStream .NET Core 3.1 1000000 663,987.63 ns 2,786.481 ns 2,470.143 ns 664,602.44 ns 1.00 0.00 499.0234 499.0234 499.0234 2095596 B
ArrayPoolStream .NET Core 3.1 1000000 59,923.22 ns 1,113.846 ns 1,093.946 ns 59,853.89 ns 0.09 0.00 - - - 64 B
MemoryStream .NET 4.7.2 5000000 5,005,030.59 ns 26,680.251 ns 22,279.218 ns 5,001,619.53 ns 1.00 0.00 742.1875 742.1875 742.1875 16777576 B
ArrayPoolStream .NET 4.7.2 5000000 4,478,622.81 ns 26,326.782 ns 24,626.088 ns 4,476,832.03 ns 0.89 0.01 406.2500 406.2500 406.2500 14682914 B
MemoryStream .NET Core 3.1 5000000 5,003,977.73 ns 37,501.681 ns 33,244.263 ns 4,998,119.53 ns 1.00 0.00 742.1875 742.1875 742.1875 16775638 B
ArrayPoolStream .NET Core 3.1 5000000 4,410,789.73 ns 19,553.125 ns 17,333.336 ns 4,411,112.50 ns 0.88 0.01 406.2500 406.2500 406.2500 14680270 B
MemoryStream .NET 4.7.2 10000000 10,164,154.69 ns 61,059.369 ns 54,127.540 ns 10,156,482.03 ns 1.00 0.00 1484.3750 1484.3750 1484.3750 33554816 B
ArrayPoolStream .NET 4.7.2 10000000 10,383,601.98 ns 179,466.463 ns 167,873.041 ns 10,388,040.63 ns 1.02 0.02 640.6250 640.6250 640.6250 31460792 B
MemoryStream .NET Core 3.1 10000000 10,100,732.92 ns 66,038.903 ns 61,772.831 ns 10,096,959.38 ns 1.00 0.00 1484.3750 1484.3750 1484.3750 33552960 B
ArrayPoolStream .NET Core 3.1 10000000 12,560,870.54 ns 71,945.603 ns 63,777.903 ns 12,555,185.16 ns 1.24 0.01 640.6250 640.6250 640.6250 31457553 B
MemoryStream .NET 4.7.2 50000000 47,874,466.06 ns 263,497.917 ns 246,476.115 ns 47,872,445.45 ns 1.00 0.00 3909.0909 3909.0909 3909.0909 134218160 B
ArrayPoolStream .NET 4.7.2 50000000 46,582,338.79 ns 218,688.724 ns 204,561.569 ns 46,587,054.55 ns 0.97 0.01 1909.0909 1909.0909 1909.0909 132127261 B
MemoryStream .NET Core 3.1 50000000 47,060,175.97 ns 164,637.017 ns 145,946.427 ns 47,055,445.45 ns 1.00 0.00 3909.0909 3909.0909 3909.0909 134216425 B
ArrayPoolStream .NET Core 3.1 50000000 46,196,160.39 ns 346,976.745 ns 307,585.847 ns 46,140,322.73 ns 0.98 0.01 1909.0909 1909.0909 1909.0909 132121074 B