|
using BenchmarkDotNet.Attributes; |
|
using BenchmarkDotNet.Running; |
|
using System.Collections.Generic; |
|
|
|
namespace EqualityPerformanceTest |
|
{ |
|
|
|
public class Person |
|
{ |
|
public int Id { get; set; } = 1; |
|
public string Name { get; set; } = "SomeValue"; |
|
|
|
public bool EqualsUsingOperators(Person other) |
|
{ |
|
return |
|
other.Id == Id && |
|
other.Name == Name; |
|
} |
|
|
|
|
|
public bool EqualsUsingComparer(Person other) |
|
{ |
|
return |
|
EqualityComparer<int>.Default.Equals(other.Id, Id) && |
|
EqualityComparer<string>.Default.Equals(other.Name, Name); |
|
} |
|
|
|
public bool EqualsUsingEquals(Person other) |
|
{ |
|
return Id.Equals(other.Id) |
|
&& Name.Equals(other.Name); |
|
} |
|
|
|
public bool EqualsUsingTuples(Person other) |
|
{ |
|
return (Id, Name) == (other.Id, other.Name); |
|
} |
|
|
|
} |
|
|
|
public class EqualityTests |
|
{ |
|
|
|
[Benchmark] |
|
public void UsingOperators() |
|
{ |
|
var person = new Person { Id = 1, Name = "Hans" }; |
|
var equal = person.EqualsUsingOperators(person); |
|
|
|
} |
|
|
|
[Benchmark] |
|
public void UsingCompararer() |
|
{ |
|
var person = new Person { Id = 1, Name = "Hans" }; |
|
var equal = person.EqualsUsingComparer(person); |
|
} |
|
|
|
[Benchmark] |
|
public void UsingEquals() |
|
{ |
|
var person = new Person { Id = 1, Name = "Hans" }; |
|
var equal = person.EqualsUsingEquals(person); |
|
} |
|
|
|
[Benchmark] |
|
public void UsingTuples() |
|
{ |
|
var person = new Person { Id = 1, Name = "Hans" }; |
|
var equal = person.EqualsUsingTuples(person); |
|
} |
|
} |
|
|
|
public class Program |
|
{ |
|
public static void Main(string[] args) |
|
{ |
|
var summary = BenchmarkRunner.Run<EqualityTests>(); |
|
} |
|
} |
|
} |