Softeq / XToolkit.WhiteLabel

Modular MVVM framework for fast creating powerful cross-platform applications with Xamarin & .NET for Mobile
https://softeq.github.io/XToolkit.WhiteLabel/
MIT License
25 stars 5 forks source link

Remove Chunkify method #523

Closed wcoder closed 1 year ago

wcoder commented 1 year ago

Description

Replace WL Chunkify extension method with .NET6+ Chunk method.

Benchmark `Chunk` is a little bit better: | Method | ChunkSize | DataLength | Mean | Error | StdDev | Gen0 | Gen1 | Gen2 | Allocated | |------------- |---------- |----------- |----------------:|--------------:|--------------:|----------:|----------:|----------:|-----------:| | Run_Chunkify | 5 | 50 | 575.7 ns | 11.51 ns | 26.21 ns | 0.1106 | - | - | 928 B | | Run_Chunk | 5 | 50 | 579.3 ns | 11.66 ns | 27.48 ns | 0.1087 | - | - | 912 B | | Run_Chunkify | 5 | 1000 | 8,134.9 ns | 160.37 ns | 267.94 ns | 1.6632 | 0.0610 | - | 13984 B | | Run_Chunk | 5 | 1000 | 8,239.3 ns | 116.83 ns | 109.28 ns | 1.6632 | 0.0610 | - | 13968 B | | Run_Chunkify | 5 | 1000000 | 19,295,810.1 ns | 385,811.80 ns | 577,464.93 ns | 1718.7500 | 1468.7500 | 1000.0000 | 13795754 B | | Run_Chunk | 5 | 1000000 | 19,053,666.7 ns | 378,848.06 ns | 984,676.48 ns | 1718.7500 | 1468.7500 | 1000.0000 | 13795671 B | | Run_Chunkify | 10 | 50 | 488.0 ns | 13.41 ns | 38.92 ns | 0.0734 | - | - | 616 B | | Run_Chunk | 10 | 50 | 486.4 ns | 12.83 ns | 37.21 ns | 0.0715 | - | - | 600 B | | Run_Chunkify | 10 | 1000 | 6,564.1 ns | 130.72 ns | 195.65 ns | 1.0376 | 0.0153 | - | 8712 B | | Run_Chunk | 10 | 1000 | 6,884.3 ns | 149.04 ns | 432.40 ns | 1.0376 | 0.0229 | - | 8696 B | | Run_Chunkify | 10 | 1000000 | 12,358,224.3 ns | 246,899.24 ns | 696,383.70 ns | 984.3750 | 484.3750 | 484.3750 | 8497997 B | | Run_Chunk | 10 | 1000000 | 11,450,612.8 ns | 207,580.04 ns | 194,170.50 ns | 984.3750 | 484.3750 | 484.3750 | 8497981 B | More better on the .Net 7 .NET6: BenchmarkDotNet=v0.13.5, OS=macOS Ventura 13.2.1 (22D68) [Darwin 22.3.0] Intel Core i9-9880H CPU 2.30GHz, 1 CPU, 8 logical and 8 physical cores .NET SDK=7.0.202 [Host] : .NET 6.0.15 (6.0.1523.11507), X64 RyuJIT AVX2 DefaultJob : .NET 6.0.15 (6.0.1523.11507), X64 RyuJIT AVX2 | Method | ChunkSize | DataLength | Mean | Error | StdDev | Gen0 | Gen1 | Allocated | |------------- |---------- |----------- |-----------:|---------:|---------:|-------:|-------:|----------:| | Run_Chunkify | 1 | 8 | 277.4 ns | 3.39 ns | 3.17 ns | 0.0658 | - | 552 B | | Run_Chunk | 1 | 8 | 302.1 ns | 6.63 ns | 19.46 ns | 0.0639 | - | 536 B | | Run_Chunkify | 1 | 100 | 2,312.6 ns | 45.70 ns | 42.74 ns | 0.6561 | 0.0076 | 5512 B | | Run_Chunk | 1 | 100 | 2,422.0 ns | 21.66 ns | 16.91 ns | 0.6561 | 0.0076 | 5496 B | | Run_Chunkify | 3 | 8 | 180.6 ns | 3.62 ns | 5.74 ns | 0.0381 | - | 320 B | | Run_Chunk | 3 | 8 | 190.8 ns | 3.87 ns | 11.09 ns | 0.0410 | - | 344 B | | Run_Chunkify | 3 | 100 | 1,254.0 ns | 24.15 ns | 24.81 ns | 0.3109 | 0.0019 | 2616 B | | Run_Chunk | 3 | 100 | 1,394.8 ns | 27.83 ns | 81.18 ns | 0.3147 | 0.0019 | 2640 B | | Run_Chunkify | 10 | 8 | 166.0 ns | 3.37 ns | 7.60 ns | 0.0315 | - | 264 B | | Run_Chunk | 10 | 8 | 133.7 ns | 2.45 ns | 2.29 ns | 0.0372 | - | 312 B | | Run_Chunkify | 10 | 100 | 774.2 ns | 8.51 ns | 7.54 ns | 0.1297 | - | 1088 B | | Run_Chunk | 10 | 100 | 792.2 ns | 11.14 ns | 9.87 ns | 0.1278 | - | 1072 B | .NET7: BenchmarkDotNet=v0.13.5, OS=macOS Ventura 13.2.1 (22D68) [Darwin 22.3.0] Intel Core i9-9880H CPU 2.30GHz, 1 CPU, 8 logical and 8 physical cores .NET SDK=7.0.202 [Host] : .NET 7.0.4 (7.0.423.11508), X64 RyuJIT AVX2 DefaultJob : .NET 7.0.4 (7.0.423.11508), X64 RyuJIT AVX2 | Method | ChunkSize | DataLength | Mean | Error | StdDev | Gen0 | Gen1 | Allocated | |------------- |---------- |----------- |-----------:|---------:|----------:|-------:|-------:|----------:| | Run_Chunkify | 1 | 8 | 271.9 ns | 4.60 ns | 4.31 ns | 0.0658 | - | 552 B | | Run_Chunk | 1 | 8 | 256.4 ns | 3.45 ns | 2.70 ns | 0.0648 | - | 544 B | | Run_Chunkify | 1 | 100 | 2,247.1 ns | 38.51 ns | 32.16 ns | 0.6561 | 0.0076 | 5512 B | | Run_Chunk | 1 | 100 | 2,409.3 ns | 48.17 ns | 122.62 ns | 0.6561 | 0.0076 | 5504 B | | Run_Chunkify | 3 | 8 | 177.8 ns | 4.33 ns | 12.62 ns | 0.0381 | - | 320 B | | Run_Chunk | 3 | 8 | 156.4 ns | 3.06 ns | 2.86 ns | 0.0420 | - | 352 B | | Run_Chunkify | 3 | 100 | 1,247.0 ns | 19.84 ns | 36.78 ns | 0.3109 | 0.0019 | 2616 B | | Run_Chunk | 3 | 100 | 1,209.3 ns | 18.27 ns | 21.04 ns | 0.3147 | 0.0019 | 2648 B | | Run_Chunkify | 10 | 8 | 137.6 ns | 2.16 ns | 2.12 ns | 0.0315 | - | 264 B | | Run_Chunk | 10 | 8 | 129.4 ns | 2.57 ns | 2.96 ns | 0.0353 | - | 296 B | | Run_Chunkify | 10 | 100 | 800.8 ns | 15.83 ns | 30.12 ns | 0.1297 | - | 1088 B | | Run_Chunk | 10 | 100 | 760.6 ns | 11.34 ns | 9.47 ns | 0.1402 | - | 1176 B | Sources: using Softeq.XToolkit.Common.Extensions; [MemoryDiagnoser] public class ChunkifyBenchmarks { [Params(5, 10)] public int ChunkSize; [Params(50, 1000, 1_000_000)] public int DataLength; public IEnumerable _generator; [GlobalSetup] public void Setup() { _generator = Enumerable.Range(1, DataLength); } [Benchmark] public List Run_Chunkify() { var result = _generator.Chunkify(ChunkSize).ToList(); return result; } [Benchmark] public List Run_Chunk() { var result = _generator.Chunk(ChunkSize).ToList(); return result; } }

Issues Resolved

API Changes

Removed:

Platforms Affected

Behavioral/Visual Changes

None

Before/After Screenshots

Not applicable

PR Checklist