C# 位图图像作为字典键

C# 位图图像作为字典键,c#,image-processing,bitmap,C#,Image Processing,Bitmap,我想知道图像的大小应该是多少,以便将其用作哈希集/字典键。我也在考虑为此使用哈希函数,但我担心哈希冲突。我需要存储大约一百万张图像。在HashSet或Dictionary中使用什么数据作为键并不重要,但需要实现一个GetHashCode和一个Equals方法 哈希冲突不是问题。这将把两个图像放在同一个存储桶中,并使用Equals方法来找到正确的图像。在哈希集或字典中使用什么数据作为键并不重要,但需要为其实现GetHashCode和Equals方法 哈希冲突不是问题。这将把两个图像放在同一个buc

我想知道图像的大小应该是多少,以便将其用作哈希集/字典键。我也在考虑为此使用哈希函数,但我担心哈希冲突。我需要存储大约一百万张图像。

在HashSet或Dictionary中使用什么数据作为键并不重要,但需要实现一个
GetHashCode
和一个
Equals
方法


哈希冲突不是问题。这将把两个图像放在同一个存储桶中,并使用
Equals
方法来找到正确的图像。

在哈希集或字典中使用什么数据作为键并不重要,但需要为其实现
GetHashCode
Equals
方法


哈希冲突不是问题。这将把两个图像放在同一个bucket中,并使用
Equals
方法找到正确的图像。

位图图像作为键?那不是个好主意。Hashset键应该尽可能小,否则性能会受到很大影响


您可以做的是从图像中计算一个散列值(比如SHA1),然后将其用作密钥。它只有20个字节,因此应该是一个很好的大小,无论如何比完整的位图图像要好得多。

位图图像作为键?那不是个好主意。Hashset键应该尽可能小,否则性能会受到很大影响


您可以做的是从图像中计算一个散列值(比如SHA1),然后将其用作密钥。它只有20个字节,因此应该是一个很好的大小,无论如何比完整的位图图像要好得多。

给定图像的字节数,您可以使用MD5或SHA1等算法为其计算哈希值

bytes
作为图片字节数组的示例:

using (var md5 = new System.Security.Cryptography.MD5CryptoServiceProvider())
{
    var hash = Convert.ToBase64String(md5.ComputeHash(bytes));
    //Store hash
}

给定图像的字节数,可以使用MD5或SHA1等算法为其计算哈希

bytes
作为图片字节数组的示例:

using (var md5 = new System.Security.Cryptography.MD5CryptoServiceProvider())
{
    var hash = Convert.ToBase64String(md5.ComputeHash(bytes));
    //Store hash
}

但是你用什么作为钥匙呢?第一个x字节数?如果图像基本相同怎么办?然后可能会有很多冲突,使哈希表的行为更像一个链表。更不用说,Equals函数是什么样子的?在发生冲突的情况下,您不需要比较所有字节来测试是否相等吗?在我看来,要么是一个非常慢的散列函数(几乎没有冲突),要么是一个非常快的散列函数,有很多冲突,还有一个非常慢的Equals函数。我同意@Roy Dictus的观点:不要使用图像本身。但是你用什么作为关键呢?第一个x字节数?如果图像基本相同怎么办?然后可能会有很多冲突,使哈希表的行为更像一个链表。更不用说,Equals函数是什么样子的?在发生冲突的情况下,您不需要比较所有字节来测试是否相等吗?在我看来,要么是一个非常慢的散列函数(几乎没有冲突),要么是一个非常快的散列函数,有很多冲突,还有一个非常慢的Equals函数。我同意@Roy Dictus:不要使用图像本身。不需要否决这个答案,它是正确的!如果你投了反对票,至少要有礼貌地解释一下原因。没有必要投反对票,这是正确的!如果你投了反对票,至少要有礼貌地解释一下原因。