2 changed files with 102 additions and 1 deletions
@ -0,0 +1,101 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Reactive.Subjects; |
|||
using System.Text; |
|||
using Avalonia.Data; |
|||
using BenchmarkDotNet.Attributes; |
|||
|
|||
namespace Avalonia.Benchmarks.Base |
|||
{ |
|||
[MemoryDiagnoser] |
|||
public class StyledPropertyBenchmarks |
|||
{ |
|||
[Benchmark] |
|||
public void Set_Int_Property_LocalValue() |
|||
{ |
|||
var obj = new StyledClass(); |
|||
|
|||
for (var i = 0; i < 100; ++i) |
|||
{ |
|||
obj.IntValue += 1; |
|||
} |
|||
} |
|||
|
|||
[Benchmark] |
|||
public void Set_Int_Property_Multiple_Priorities() |
|||
{ |
|||
var obj = new StyledClass(); |
|||
var value = 0; |
|||
|
|||
for (var i = 0; i < 100; ++i) |
|||
{ |
|||
for (var p = BindingPriority.Animation; p <= BindingPriority.Style; ++p) |
|||
{ |
|||
obj.SetValue(StyledClass.IntValueProperty, value++, p); |
|||
} |
|||
} |
|||
} |
|||
|
|||
[Benchmark] |
|||
public void Set_Int_Property_TemplatedParent() |
|||
{ |
|||
var obj = new StyledClass(); |
|||
|
|||
for (var i = 0; i < 100; ++i) |
|||
{ |
|||
obj.SetValue(StyledClass.IntValueProperty, obj.IntValue + 1, BindingPriority.TemplatedParent); |
|||
} |
|||
} |
|||
|
|||
[Benchmark] |
|||
public void Bind_Int_Property_LocalValue() |
|||
{ |
|||
var obj = new StyledClass(); |
|||
var source = new Subject<BindingValue<int>>(); |
|||
|
|||
obj.Bind(StyledClass.IntValueProperty, source); |
|||
|
|||
for (var i = 0; i < 100; ++i) |
|||
{ |
|||
source.OnNext(i); |
|||
} |
|||
} |
|||
|
|||
[Benchmark] |
|||
public void Bind_Int_Property_Multiple_Priorities() |
|||
{ |
|||
var obj = new StyledClass(); |
|||
var sources = new List<Subject<BindingValue<int>>>(); |
|||
var value = 0; |
|||
|
|||
for (var p = BindingPriority.Animation; p <= BindingPriority.Style; ++p) |
|||
{ |
|||
var source = new Subject<BindingValue<int>>(); |
|||
sources.Add(source); |
|||
obj.Bind(StyledClass.IntValueProperty, source, p); |
|||
} |
|||
|
|||
for (var i = 0; i < 100; ++i) |
|||
{ |
|||
foreach (var source in sources) |
|||
{ |
|||
source.OnNext(value++); |
|||
} |
|||
} |
|||
} |
|||
|
|||
class StyledClass : AvaloniaObject |
|||
{ |
|||
private int _intValue; |
|||
|
|||
public static readonly StyledProperty<int> IntValueProperty = |
|||
AvaloniaProperty.Register<StyledClass, int>(nameof(IntValue)); |
|||
|
|||
public int IntValue |
|||
{ |
|||
get => GetValue(IntValueProperty); |
|||
set => SetValue(IntValueProperty, value); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
Loading…
Reference in new issue