PropertyAccessorBenchmarks.cs 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. using System;
  2. using Avalonia.Data.Core.Plugins;
  3. using BenchmarkDotNet.Attributes;
  4. namespace Avalonia.Benchmarks.Data
  5. {
  6. [MemoryDiagnoser, InProcess]
  7. public class PropertyAccessorBenchmarks
  8. {
  9. private readonly InpcPropertyAccessorPlugin _inpcPlugin = new InpcPropertyAccessorPlugin();
  10. private readonly ReflectionMethodAccessorPlugin _methodPlugin = new ReflectionMethodAccessorPlugin();
  11. private readonly AccessorTestObject _targetStrongRef = new AccessorTestObject();
  12. private readonly WeakReference<object> _targetWeakRef;
  13. public PropertyAccessorBenchmarks()
  14. {
  15. _targetWeakRef = new WeakReference<object>(_targetStrongRef);
  16. }
  17. [Benchmark]
  18. public void InpcAccessorMatch()
  19. {
  20. _inpcPlugin.Match(_targetWeakRef, nameof(AccessorTestObject.Test));
  21. }
  22. [Benchmark]
  23. public void InpcAccessorStart()
  24. {
  25. _inpcPlugin.Start(_targetWeakRef, nameof(AccessorTestObject.Test));
  26. }
  27. [Benchmark]
  28. public void MethodAccessorMatch()
  29. {
  30. _methodPlugin.Match(_targetWeakRef, nameof(AccessorTestObject.Execute));
  31. }
  32. [Benchmark]
  33. public void MethodAccessorStart()
  34. {
  35. _methodPlugin.Start(_targetWeakRef, nameof(AccessorTestObject.Execute));
  36. }
  37. }
  38. }