C# 比较大型文本文件-比较哈希是否比使用文件子集更快?
假设我有两个据称相同的大(文本)文件,但我想确认一下。整个哈利波特系列的成人版和儿童版也许 如果全文的字符串表示太大,无法立即保存在内存中,那么执行以下操作是否会更快:C# 比较大型文本文件-比较哈希是否比使用文件子集更快?,c#,.net,hash,string-comparison,C#,.net,Hash,String Comparison,假设我有两个据称相同的大(文本)文件,但我想确认一下。整个哈利波特系列的成人版和儿童版也许 如果全文的字符串表示太大,无法立即保存在内存中,那么执行以下操作是否会更快: a) 将两个文件全部散列,然后测试散列是否相同 或 b) 读入每个文件的可管理块并进行比较,直到达到EOF或发现不匹配 换句话说,比较2个小散列的便利性是否会被生成所述散列所花费的时间所抵消 我期待着几个“视情况而定”的答案,所以如果你想要一些假设: 语言是C#in.NET 文本文件每个3GB 哈希函数是MD5 最大“
- a) 将两个文件全部散列,然后测试散列是否相同
- b) 读入每个文件的可管理块并进行比较,直到达到EOF或发现不匹配
- 语言是C#in.NET
- 文本文件每个3GB
- 哈希函数是MD5
- 最大“备用”RAM为1GB
我会选择选项2。选项A只有在重复使用散列(即,有其他文件进行比较)时才有用,这样计算散列的成本就不是一个因素 否则我会选择B选项 为了获得最大的速度,我将使用实例和XOR内容-比较可以在第一次遇到差异时停止(即XOR操作返回某物!=0)。关于内存消耗,您可以使用“移动窗口”(即通过调用
CreateViewAccessor
)来允许按字面意思处理TB大小的文件
甚至可以用一些基于LINQ的比较方法来测试XOR的性能。。。始终从比较文件大小开始,这样可以避免进行不必要的计算…+1首先检查文件大小