HttpRequest.GetHashCode()实现 - 发生冲突的频率如何?

Sei*_*bar 3 .net asp.net hashcode

我正在尝试找到一种可靠的方法来唯一地识别和跟踪ASP.NET网站中的不同HttpRequests.

有没有人知道HttpRequest.GetHashCode()的实现?具体来说,碰撞发生的频率如何?

我知道HashCodes不保证是唯一的.我试图理解的是统计上我经常会发现HashCode重复的频率.

我想到的系统会优雅地处理HashCode冲突,但我想确保它们至少与1000中左右的1一样独特.

And*_*are 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;
    }
}
Run Code Online (Sandbox Code Playgroud)