逐字节比较文件还是读取所有字节?

时间:2010-12-14 00:50:27

标签: c# compare benchmarking checksum

我遇到了这段代码http://support.microsoft.com/kb/320348,这让我想知道比较2个文件的最佳方法是什么,以确定它们是否不同。

主要思想是优化我的程序,该程序需要验证是否有任何文件相同,以创建已删除/创建的已更改文件和/或文件的列表。

目前我正在比较文件的大小,如果它们匹配,我将进入2个文件的md5校验和,但在查看在这个问题的开头链接的代码后,它让我想知道它是否真的值得使用它来创建2个文件的校验和(基本上是在获得所有字节后)?

还应该做​​些什么其他验证来减少检查每个文件的工作?

2 个答案:

答案 0 :(得分:4)

将两个文件读入小缓冲区(4K或8K),该文件针对读取进行了优化,然后比较内存中的缓冲区(逐字节),该缓冲区针对< EM>比较

这将为您提供所有情况下的最佳表现(差异在开始,中间或结尾)。

当然,第一步是检查文件长度是否有所不同,如果是这样的话,文件确实不同......

答案 1 :(得分:0)

如果你还没有计算过文件的哈希值,那么你也可以进行适当的比较(而不是查看哈希值),因为如果文件是相同的,那么它的工作量是相同的,但如果它们是'你可以早点停下来。

当然,一次比较一个字节可能有点浪费 - 一次读取整个块并进行比较可能是一个好主意。