Search code examples
c#androidiphonexamarin.forms

How Will A Static HashCode Effect Performance (C#)


Generally, I intend for every class I have created in my project to be optimized inside of any collection and useable with the IEqualityComparer and IEquatable interfaces.

How will ignoring the GetHashCode method by returning a static int (like 0) whenever a GetHashCode method is required affect memory allocation and performance? Are there any issues that can be cause by doing this? Will calculating a value be beneficial for optimization? And ultimately, is it worth my time to go back and properly calculate a HashCode for every class in my project?


Solution

  • If you always return 0 in GetHashCode(), it will significantly slow down performance when those objects are used in a HashSet, or as keys in a Dictionary, or other data structures that rely on GetHashCode(). If you don't plan on using those objects in data structures, GetHashCode() can be ignored.

    I suggest you look into how the HashSet, Dictionary/Map/HashTable data structures actually work. When you've figured that out use System.Hashcode.Combine as shown here: https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/style-rules/ide0070