我试图找到一种可靠的方法来唯一地识别和跟踪 ASP.NET 网站中的不同 HttpRequest。
有人知道 HttpRequest.GetHashCode() 的实现吗?具体来说,碰撞发生的频率如何?
我了解 HashCodes 不保证是唯一的。我想了解的是统计上我可以期望 HashCode 重复自身的频率。
我想到的系统会优雅地处理 HashCode 冲突,但我想确保它们至少与千分之一左右一样唯一。
哈希码永远不能保证是唯一的,因为这不是它们的目的——它们旨在帮助相等性测试,作为两个实例之间潜在相等性的早期指标。
换句话说,哈希码可以帮助您快速排除两个绝对不相等的实例。
也许这样的事情是最好的:
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;
}
}