georgevanburgh opened a new pull request, #44238:
URL: https://github.com/apache/arrow/pull/44238

   [Span overrides for 
`decimal.GetBits`](https://learn.microsoft.com/en-us/dotnet/api/system.decimal.getbits?view=net-8.0#system-decimal-getbits(system-decimal-system-span((system-int32))))
 were added in .NET 5, and allow us to avoid a heap allocation for each decimal 
value serialized.
   
   Running a quick benchmark shows the expected reduction in allocations 
   
   ```csharp
   using BenchmarkDotNet.Attributes;
   
   namespace Apache.Arrow.Benchmarks;
   
   [MemoryDiagnoser]
   public class DecimalUtilityBenchmark
   {
       public decimal Value => 1.00000000m;
   
       private byte[] _buffer = new byte[16];
   
       [Benchmark(Baseline = true)]
       public void Baseline() => DecimalUtilityMain.GetBytes(Value, 34, 10, 16, 
_buffer);
   
       [Benchmark]
       public void Candidate() => DecimalUtility.GetBytes(Value, 34, 10, 16, 
_buffer);
   }
   ```
   ```
   BenchmarkDotNet v0.14.0, Windows 10 (10.0.19045.4894/22H2/2022Update)
   13th Gen Intel Core i7-13800H, 1 CPU, 20 logical and 14 physical cores
   .NET SDK 8.0.304
     [Host]     : .NET 8.0.8 (8.0.824.36612), X64 RyuJIT AVX2
     DefaultJob : .NET 8.0.8 (8.0.824.36612), X64 RyuJIT AVX2
   ```
   
   | Method    | Mean     | Error   | StdDev  | Ratio | RatioSD | Gen0   | 
Allocated | Alloc Ratio |
   |---------- 
|---------:|--------:|--------:|------:|--------:|-------:|----------:|------------:|
   | Baseline  | 162.7 ns | 3.25 ns | 4.23 ns |  1.00 |    0.04 | 0.0088 |     
112 B |        1.00 |
   | Candidate | 152.8 ns | 1.38 ns | 1.22 ns |  0.94 |    0.02 | 0.0057 |      
72 B |        0.64 |
   
   Happy to check in some benchmarks for `DecimalUtility` if they might be 
useful in future, but thought I'd leave them out for now.
   
   If merged, will close #44237.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to