HashSet或==签名

时间:2014-09-12 06:40:43

标签: c# performance optimization hashset logical-operators

我在vars doc1doc2中有两个50kb的字符串数据,它们通过实体框架从数据库中获取。我想比较这两个变量,看看doc1和doc2是否相等。我可以获取字符串的hashset并比较哈希值。或者我可以简单地使用if (doc1 == doc2)还有第三种选择更好吗?

如果没有第三个选项,那么就优化,性能以及IL在后台做什么而言,是否有任何关于hashset v。==的建议(逻辑一个是好的)?我想象一个hashset必须以线性方式扫描字符串到最后才能创建一个唯一的哈希字符串(两个变量)。 ==也是如此。那么哪一个在逻辑上更好?

2 个答案:

答案 0 :(得分:2)

==运算符逐个字符地进行比较但是一旦发现两个字符串之间不匹配就会停止,因此在这方面它将能够更好地执行,因为它可能不必扫描整个字符串即使在最糟糕的情况下,当它们相等时,你也没有比对它们进行任何更多的工作。

如果您真的关心性能,可以在数据库中存储长字符串的预先计算的哈希值,因此根本不需要查看它们的内容(假设哈希冲突不是致命的)。

答案 1 :(得分:2)

如果是stringValue == otherStringValue

  1. 与stringValue.Equals()不相同。
  2. ==运算符调用static Equals(string a, string b)方法(进而转到内部EqualsHelper进行比较。
  3. .Equals(字符串上调用null)会获得空引用异常,而在==上则不会。
  4. 遇到了http://blogs.msdn.com/b/abhinaba/archive/2006/01/07/510169.aspx这位博主说的那个

    a.Equals(b);
    string.Equals(a, b); // faster