使用System.Reflection.MethodInfo实现Delegate的GetHashCode()性能疑问
自定义Delegate的GetHashCode实现与性能顾虑
我需要实现IEqualityComparer<Delegate>接口来定义Delegate的GetHashCode()逻辑,因为要将Delegate作为字典的键使用。
Delegate的默认GetHashCode()实现如下:
public override int GetHashCode() { return base.GetType().GetHashCode(); }
这个实现的问题在于,所有同类型的Delegate实例都会返回相同的哈希码,这会导致以Delegate为键的字典查找复杂度退化为O(n),和线性查找效率一致。
为此我考虑自行实现,借助System.Reflection.MethodInfo来生成哈希码,代码如下:
public int GetHashCode(Delegate? obj) { if (obj == null) return 0; else return obj.Method.GetHashCode(); }
但我担心这个实现的性能:MethodInfo.GetHashCode()属于反射相关操作,而我知道反射的调用成本通常较高,而GetHashCode()会被字典频繁调用,性能至关重要,所以想确认这个实现是否会过于缓慢。
内容的提问来源于stack exchange,提问作者Treker
相关产品推荐
相关产品推荐

