runceel / ReactiveProperty

ReactiveProperty provides MVVM and asynchronous support features under Reactive Extensions. Target frameworks are .NET 6+, .NET Framework 4.7.2 and .NET Standard 2.0.
MIT License
896 stars 100 forks source link

Release v9.0 #402

Closed runceel closed 12 months ago

runceel commented 1 year ago

Focuses for improvement ReactiveProperty.Core package.

Many classes move to Core package:

runceel commented 1 year ago
Benchmark result: Method Mean Error StdDev Median
CreateReactiveCommand 262.654 ns 5.7692 ns 17.0105 ns 254.709 ns
CreateReactiveCommandSlim 5.223 ns 0.1473 ns 0.1150 ns 5.192 ns
BasicUsecaseForReactiveCommand 959.380 ns 18.7741 ns 31.3673 ns 951.834 ns
BasicUsecaseForReactiveCommandSlim 86.579 ns 1.7783 ns 4.3621 ns 84.436 ns
ReactivePropertyValidation 3,873.426 ns 75.5446 ns 115.3646 ns 3,819.379 ns
ValidatableReactivePropertyValidation 586.432 ns 11.6188 ns 23.4706 ns 574.883 ns
CreateReactivePropertyInstance 71.495 ns 2.0367 ns 5.9734 ns 71.710 ns
CreateReactivePropertySlimInstance 5.869 ns 0.1379 ns 0.2940 ns 5.745 ns
BasicForReactiveProperty 1,914.923 ns 36.0733 ns 64.1203 ns 1,910.775 ns
BasicForReactivePropertySlim 51.584 ns 1.0703 ns 2.6653 ns 50.972 ns
ObservePropertyLegacy 487.275 ns 9.8045 ns 24.0507 ns 488.405 ns
ObserveProperty 436.802 ns 8.6326 ns 10.2765 ns 436.693 ns
ToReactivePropertyAsSynchronized 1,422.614 ns 27.8361 ns 61.6828 ns 1,407.971 ns
ToReactivePropertyAsSynchronizedSlim 641.236 ns 11.4540 ns 9.5646 ns 637.667 ns
runceel commented 1 year ago

Pre-release package: https://www.nuget.org/packages/ReactiveProperty/9.0.0-pre202301050852 https://www.nuget.org/packages/ReactiveProperty.Core/9.0.0-pre202301050852

runceel commented 1 year ago

Benchmark result(Add validation scenarios): BenchmarkDotNet=v0.13.2, OS=Windows 11 (10.0.22621.963) 11th Gen Intel Core i7-11370H 3.30GHz, 1 CPU, 8 logical and 4 physical cores .NET SDK=7.0.101 [Host] : .NET 7.0.1 (7.0.122.56804), X64 RyuJIT AVX2 DefaultJob : .NET 7.0.1 (7.0.122.56804), X64 RyuJIT AVX2

Method Mean Error StdDev Median
CreateReactiveCommand 285.962 ns 7.4373 ns 21.3389 ns 285.799 ns
CreateReactiveCommandSlim 6.686 ns 0.2699 ns 0.7787 ns 6.494 ns
BasicUsecaseForReactiveCommand 1,032.782 ns 24.7572 ns 71.8252 ns 1,023.123 ns
BasicUsecaseForReactiveCommandSlim 97.279 ns 2.8156 ns 7.9415 ns 96.260 ns
ReactivePropertyValidation 4,384.040 ns 118.0433 ns 327.0973 ns 4,377.811 ns
ValidatableReactivePropertyValidation 648.995 ns 15.1230 ns 44.3530 ns 650.540 ns
ReactivePropertyValidationFromPoco 9,787.012 ns 194.8088 ns 470.4852 ns 9,709.158 ns
ValidatableReactivePropertyValidationFromPoco 4,151.960 ns 111.6744 ns 329.2744 ns 4,080.801 ns
ObservePropertyLegacy 583.797 ns 11.1602 ns 26.0866 ns 577.023 ns
ToReactivePropertyAsSynchronizedSlim 704.094 ns 15.8613 ns 45.7633 ns 698.847 ns
CreateReactivePropertyInstance 73.232 ns 2.0909 ns 6.1323 ns 72.876 ns
CreateReactivePropertySlimInstance 7.530 ns 0.3304 ns 0.9636 ns 7.354 ns
BasicForReactiveProperty 2,033.731 ns 53.7563 ns 154.2369 ns 1,995.652 ns
BasicForReactivePropertySlim 55.642 ns 1.6072 ns 4.7387 ns 55.327 ns
ObserveProperty 492.464 ns 10.8332 ns 31.4292 ns 483.169 ns
ToReactivePropertyAsSynchronized 1,562.178 ns 31.0457 ns 77.8876 ns 1,547.744 ns
runceel commented 1 year ago

BenchmarkDotNet=v0.13.2, OS=Windows 11 (10.0.22621.963) 11th Gen Intel Core i7-11370H 3.30GHz, 1 CPU, 8 logical and 4 physical cores .NET SDK=7.0.101 [Host] : .NET 7.0.1 (7.0.122.56804), X64 RyuJIT AVX2 DefaultJob : .NET 7.0.1 (7.0.122.56804), X64 RyuJIT AVX2

Method Mean Error StdDev Median
CreateReactiveCommand 272.382 ns 5.3772 ns 10.9842 ns 270.718 ns
CreateReactiveCommandSlim 6.073 ns 0.1737 ns 0.5067 ns 5.863 ns
BasicUsecaseForReactiveCommand 977.385 ns 19.6075 ns 39.6080 ns 965.181 ns
BasicUsecaseForReactiveCommandSlim 91.636 ns 2.0385 ns 5.8489 ns 90.232 ns
ReactivePropertyValidation 4,237.476 ns 106.6379 ns 311.0677 ns 4,172.577 ns
ValidatableReactivePropertyValidation 611.798 ns 12.2343 ns 23.2771 ns 604.610 ns
ReactivePropertyValidationFromPoco 9,534.273 ns 189.8573 ns 420.7106 ns 9,450.055 ns
ValidatableReactivePropertyValidationFromPoco 4,243.259 ns 89.4497 ns 262.3406 ns 4,155.820 ns
ObservePropertyLegacy 492.959 ns 10.5901 ns 31.2250 ns 490.128 ns
ToReactivePropertyAsSynchronizedSlim 642.594 ns 12.6093 ns 18.0839 ns 641.101 ns
CreateReactivePropertyInstance 69.738 ns 1.9463 ns 5.5212 ns 67.572 ns
CreateReactivePropertySlimInstance 6.531 ns 0.1814 ns 0.5057 ns 6.310 ns
BasicForReactiveProperty 1,985.151 ns 39.3013 ns 65.6636 ns 1,977.398 ns
BasicForReactivePropertySlim 52.452 ns 1.0920 ns 2.0776 ns 52.048 ns
ObserveProperty 448.283 ns 8.9445 ns 15.8989 ns 442.817 ns
ToReactivePropertyAsSynchronized 1,365.580 ns 27.0695 ns 62.1967 ns 1,341.078 ns
runceel commented 10 months ago

BenchmarkDotNet v0.13.10, Windows 11 (10.0.22621.2715/22H2/2022Update/SunValley2) 11th Gen Intel Core i7-11370H 3.30GHz, 1 CPU, 8 logical and 4 physical cores .NET SDK 8.0.100 [Host] : .NET 8.0.0 (8.0.23.53103), X64 RyuJIT AVX2 DefaultJob : .NET 8.0.0 (8.0.23.53103), X64 RyuJIT AVX2

Method Mean Error StdDev
CreateReactiveCommand 209.901 ns 3.9937 ns 4.2732 ns
CreateReactiveCommandSlim 5.033 ns 0.1412 ns 0.1511 ns
BasicUsecaseForReactiveCommand 709.358 ns 12.6629 ns 10.5741 ns
BasicUsecaseForReactiveCommandSlim 66.713 ns 1.0024 ns 0.9376 ns
ReactivePropertyValidation 3,010.301 ns 46.3731 ns 43.3774 ns
ValidatableReactivePropertyValidation 426.690 ns 5.4167 ns 4.5232 ns
ReactivePropertyValidationFromPoco 7,475.687 ns 113.3344 ns 100.4680 ns
ValidatableReactivePropertyValidationFromPoco 3,070.299 ns 50.0503 ns 63.2976 ns
ObservePropertyLegacy 390.960 ns 7.7782 ns 10.1139 ns
ToReactivePropertyAsSynchronizedSlim 528.475 ns 4.2843 ns 3.7979 ns
CreateReactivePropertyInstance 50.979 ns 0.4658 ns 0.4129 ns
CreateReactivePropertySlimInstance 5.567 ns 0.1350 ns 0.1196 ns
BasicForReactiveProperty 1,306.508 ns 7.4277 ns 5.7991 ns
BasicForReactivePropertySlim 40.380 ns 0.2933 ns 0.2600 ns
ObserveProperty 373.770 ns 5.6926 ns 5.0464 ns
ToReactivePropertyAsSynchronized 1,029.458 ns 17.2638 ns 15.3039 ns