我正在尝试找到一种可靠的方法来在ASP.NET网站中唯一标识和跟踪不同的HttpRequests。
有没有人知道HttpRequest.GetHashCode()的实现?具体来说,碰撞发生的频率如何?
据我所知,HashCodes不保证是唯一的。我试图理解的是统计上我经常发现HashCode重复的频率。
我想到的系统会优雅地处理HashCode碰撞,但我想确保它们至少与1000中左右的1一样独特。
答案 0 :(得分:5)
Hash代码从不保证是唯一的,因为这不是它们的目的 - 它们旨在帮助将相等性测试作为两个实例之间潜在相等性的早期指示。
换句话说,哈希码可以帮助您快速排除两个明确不相等的实例。
也许这样的事情会是最好的:
class TrackableHttpRequest : IEquatable<TrackableHttpRequest>
{
readonly Guid id = Guid.NewGuid();
public Guid Id { get { return this.id; } }
public HttpRequest Request { get; set; }
public override Int32 GetHashCode()
{
return this.Id.GetHashCode();
}
public override Boolean Equals(Object obj)
{
return this.Equals(obj as TrackableHttpRequest);
}
public bool Equals(TrackableHttpRequest other)
{
if (other == null)
return false;
return this.Id == other.Id;
}
}