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

如果没有第三种选择,那么关于hashset v。==的优化,性能以及IL在后台的作用,有没有人有任何建议(逻辑上是好的)?我想像一个hashset将不得不以线性方式扫描字符串到最后以创建唯一的哈希字符串(用于两个var)。 ==也是如此。那么哪个在逻辑上更好呢?

最佳答案

==运算符逐个字符地进行比较,但是一旦发现两个字符串之间不匹配,便会立即停止,因此在这方面它会表现得更好,因为它可能不必扫描整个字符串,即使在最坏的情况下也是如此。在它们相等的情况下,除了对它们进行哈希处理之外,您所做的工作还没有其他。

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

09-07 03:11