【问题标题】:HttpRequest.GetHashCode() implementation - how often do collisions occur?HttpRequest.GetHashCode() 实现 - 冲突多久发生一次?
【发布时间】:2009-09-23 15:09:34
【问题描述】:

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

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

我了解 HashCode 不能保证是唯一的。我想了解的是统计上我期望 HashCode 重复的频率。

我想到的系统会优雅地处理 HashCode 冲突,但我想确保它们至少与千分之一一样独特。

【问题讨论】:

  • 碰撞的可能性完全取决于数据,所以没有人能真正告诉你碰撞发生的频率,除非你有一组固定的输入,这些输入在所有运行中都是不变的。如果您使用我提出的解决方案,您将不会发生冲突。
  • 嗯,我想理论上可能会与我的方法发生冲突;)en.wikipedia.org/wiki/…

标签: .net asp.net hashcode


【解决方案1】:

哈希码从不保证是唯一的,因为这不是它们的目的 - 它们旨在帮助进行相等性测试,作为两个实例之间潜在相等性的早期指标。

换句话说,哈希码可以帮助您快速排除两个绝对相等的实例。

也许这样的事情会是最好的:

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;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-10
    • 2013-11-26
    • 2021-10-22
    • 1970-01-01
    • 2023-04-04
    • 2017-06-24
    • 1970-01-01
    相关资源
    最近更新 更多