TemplateBinding_Setup.cs 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. using Avalonia.Controls;
  2. using Avalonia.Data;
  3. using BenchmarkDotNet.Attributes;
  4. namespace Avalonia.Benchmarks.Data;
  5. [MemoryDiagnoser]
  6. public class TemplateBinding_Setup
  7. {
  8. private Decorator _target = new();
  9. private Control _templatedParent = new();
  10. public TemplateBinding_Setup()
  11. {
  12. _target.TemplatedParent = _templatedParent;
  13. _templatedParent.Tag = "parentTag";
  14. }
  15. [Benchmark]
  16. public void Setup_TemplateBinding_OneWay()
  17. {
  18. var target = _target;
  19. var binding = new TemplateBinding(Control.TagProperty);
  20. for (var i = 0; i < 100; ++i)
  21. {
  22. // Explicit cast to IBinding is required to prevent the IObservable<object?>
  23. // overload being selected.
  24. using var d = target.Bind(Control.TagProperty, (IBinding)binding);
  25. }
  26. }
  27. [Benchmark]
  28. public void Setup_TemplateBinding_TwoWay()
  29. {
  30. var target = _target;
  31. var binding = new TemplateBinding(Control.TagProperty) { Mode = BindingMode.TwoWay };
  32. for (var i = 0; i < 100; ++i)
  33. {
  34. // Explicit cast to IBinding is required to prevent the IObservable<object?>
  35. // overload being selected.
  36. using var d = target.Bind(Control.TagProperty, (IBinding)binding);
  37. }
  38. }
  39. }