Closed runceel closed 12 months 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 |
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 |
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 |
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 |
Focuses for improvement ReactiveProperty.Core package.
Many classes move to Core package:
AsyncReactiveCommand
ReactiveCommandSlim
ReactiveCommandSlim
CompositeDisposable
ObserveProperty
ToReactivePropertySlimAsSynchronized
Select
andWhere
extension methods forIObservable<T>
andCombineLatest
extension method forIEnumerable<IObservable<T>>
toReactive.Bindings.TinyLinq
namespace.ValidatableReactiveProperty
BooleanNotifier
,BusyNotifier
,CountNotifier
,MessageBroker
andAsyncMessageBroker
.CollectionUtilities.ObserveElementProperty
andObserveElementObservableProperty
forIReadOnlyCollection<T>