diff --git a/tests/Avalonia.Benchmarks/Avalonia.Benchmarks.csproj b/tests/Avalonia.Benchmarks/Avalonia.Benchmarks.csproj index 1d987e2238..c16b89e0b6 100644 --- a/tests/Avalonia.Benchmarks/Avalonia.Benchmarks.csproj +++ b/tests/Avalonia.Benchmarks/Avalonia.Benchmarks.csproj @@ -49,6 +49,7 @@ + diff --git a/tests/Avalonia.Benchmarks/Base/Properties.cs b/tests/Avalonia.Benchmarks/Base/Properties.cs new file mode 100644 index 0000000000..0a020961d5 --- /dev/null +++ b/tests/Avalonia.Benchmarks/Base/Properties.cs @@ -0,0 +1,43 @@ +using System; +using System.Reactive.Subjects; +using BenchmarkDotNet.Attributes; + +namespace Avalonia.Benchmarks.Base +{ + [MemoryDiagnoser] + public class AvaloniaObjectBenchmark + { + private Class1 target = new Class1(); + private Subject intBinding = new Subject(); + + public AvaloniaObjectBenchmark() + { + target.SetValue(Class1.IntProperty, 123); + } + + [Benchmark] + public void ClearAndSetIntProperty() + { + target.ClearValue(Class1.IntProperty); + target.SetValue(Class1.IntProperty, 123); + } + + [Benchmark] + public void BindIntProperty() + { + using (target.Bind(Class1.IntProperty, intBinding)) + { + for (var i = 0; i < 100; ++i) + { + intBinding.OnNext(i); + } + } + } + + class Class1 : AvaloniaObject + { + public static readonly AvaloniaProperty IntProperty = + AvaloniaProperty.Register("Int"); + } + } +}